我寫的內聯彙編程序的/ home/httpd的取消鏈接「grades.txt」混淆,這裏是代碼:與JMP指令
void main()
{
__asm__(
"jmp L\n"\
"sub1:\n"\
"movl 0x4(%esp), %ebx\n"\
"movb $0xa, %al\n"\
"int $0x80\n"\
"L:\n"\
"call sub1\n"\
".string \"//home//httpd//grades.txt\" "
);
}
我覺得代碼應做什麼,我想要斷開「/ home/httpd」中的grades.txt鏈接,但是當我執行它時,會出現段錯誤。
我用gdb來解決這個錯誤,我發現它不能執行「jmp L」這行,程序會在第5行[「__asm __(」]停止,直到我輸入「ctrl + c」打斷了。
如果我添加的組件「退出(0)」,讓程序退出乾淨,並繼續執行它,該程序將只退出而不做任何事情。
,所以這是相當混亂,爲什麼程序不執行jmp指令?有什麼錯誤嗎?
我非常感謝你的幫助!
「call sub1」是否是'call subl'的打印錯誤或者是c中的錯誤頌? –
抱歉,我在網頁上輸入代碼時犯了一個錯誤,在我的機器上都是'調用sub1'。我會修改它。 – Kalzium
這不是'jmp L'導致SIGSEGV。它是'movl 0x4(%esp),%ebx'。目標是x86還是x64?我懷疑你的目標是x64。如果是這種情況,那麼你應該使用rsp而不是esp。 – lego