הבלוג של גרי רשף

05/10/2010

קוד המשכפל את עצמו

Filed under: Uncategorized — תגיות: , — גרי רשף @ 08:02

בספרו "SQL Server 2005" – איציק בן גן מציג אתגר: כתיבת קוד המשכפל את עצמו.

אסור להיעזר בפונקציות מערכת לזיהוי הקוד אותו אני מפעיל, למשל-

SELECT DEST.TEXT

FROM sys.dm_exec_connections SDEC

CROSS APPLY sys.dm_exec_sql_text(SDEC.[most_recent_sql_handle]) AS DEST

Where SDEC.most_recent_session_id=@@SPID;

למה אסור? דווקא אחלה רעיון, ויש דרכים שונות לשלוף מהמערכת את הקוד הנוכחי שרץ..

פתרון מותר המוצג בספר (כדי לא לקלקל- הפונט בצבע לבן, ויש להעתיקו ל-SSMS):

Print Replace(0x2027202729,0x20,'Print Replace(0x2027202729,0x20,')
 

פתרון מניח את הדעת לא מצאתי, ולכן אין ברירה אלא למצוא פתרונות לא מניחים את הדעת:

1. פתחו Query חדש ב-SSMS ולחצו על Execute. מכיוון שלא כתוב כלום, לא תתקבל אף תוצאה..

2. הריצו את הקוד הבא (זו הודעת שגיאה שתשכפל את עצמה):

Msg 102, Level 15, State 1, Line 1

Incorrect syntax near '15'.

3. כיתבו את הקוד הבא ב-Query חדש, שימרו על השרת בתור C:\Temp\MyCode.sql והריצו:

Exec xp_cmdshell 'Type C:\Temp\MyCode.sql'
 

4. פעולת הכנה: צרו טבלה והכניסו לתוכה ערך:

Create Table #T(S Varchar(Max))

Insert Into #T Values('Select * From #T')

וכעת הריצו את הקוד

Select * From #T

בקיצור- מזל שהרייטינג של הבלוג הזה שואף לאפס (בוודאי לאחר פרסום הפוסט הנוכחי)..

מודעות פרסומת

2 תגובות »

  1. למה שואף ל-0?

    אבל לא הבנתי מה צעדים 1-4 נותנים? איך Select * From #T יוצר קוד שמשכפל את עצמו?

    תגובה של מאיר דודאי — 05/10/2010 @ 17:19

    • מהצצות מזדמנות לסטטיסטיקה התרשמתי שמופיעות שם בעיקר הכניסות שלי..
      בוא נניח שהפוסט הזה לא נכתב ושדברי הוצאו מהקשרם!

      תגובה של גרי רשף — 06/10/2010 @ 13:50


RSS feed for comments on this post. TrackBack URI

להשאיר תגובה

הזינו את פרטיכם בטופס, או לחצו על אחד מהאייקונים כדי להשתמש בחשבון קיים:

הלוגו של WordPress.com

אתה מגיב באמצעות חשבון WordPress.com שלך. לצאת מהמערכת / לשנות )

תמונת Twitter

אתה מגיב באמצעות חשבון Twitter שלך. לצאת מהמערכת / לשנות )

תמונת Facebook

אתה מגיב באמצעות חשבון Facebook שלך. לצאת מהמערכת / לשנות )

תמונת גוגל פלוס

אתה מגיב באמצעות חשבון Google+ שלך. לצאת מהמערכת / לשנות )

מתחבר ל-%s

בלוג בוורדפרס.קום.

%d בלוגרים אהבו את זה: