我正在學習一些linux的彙編程序,我有這個示例程序只是應該調用write syscall並在屏幕上打印'Hello,World!',但它會產生段錯誤。我在空閒時間學習,而不是作業,我不再去學校!linux asm x86生產段錯誤
任何人都可以看到這個代碼有什麼問題嗎?
xor eax,eax
xor ebx,ebx
xor ecx,ecx
xor edx,edx
jmp short string
code:
pop ecx
mov bl,1
mov dl,13
mov al,4
int 0x80
dec bl
mov al,1
int 0x80
string:
call code
db 'Hello, World!'
我必須說,這是一種非常不尋常的將字符串地址加載到'ecx'中的方法。 – 2010-12-15 22:28:55
它是否會產生輸出,然後是段錯誤,還是在分段之前不產生輸出? – 2010-12-15 23:29:57
@Greg:同意了,儘管它是編寫位置獨立shellcode最常用的方法之一...... – 2010-12-15 23:52:16