我正在嘗試學習低級開發。通過將ebx中的0和eax中的1(用於exit()系統調用)並調用int 0x80,它應該退出程序。 我有一個簡單的c程序運行良好,但是當我粘貼它,而不是按預期退出,我得到一個segmantation故障。爲什麼會發生?這爲什麼會導致分段錯誤?它應該只是退出
謝謝!
__asm__ ("xor %ebx, %ebx;"
"mov %al, 1;"
"int $80;"
);
編輯:感謝您的建議,但仍然沒有什麼,但賽格故障,但。 這裏有修改我所做的:
__asm__ ("xor %ebx, %ebx;"
"xor %eax, %eax;"
"mov $1, %eax;"
"int $80;"
);
編輯:從http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html
asm("movl $1,%%eax; /* SYS_exit is 1 */
xorl %%ebx,%%ebx; /* Argument is in ebx, it is 0 */
int $0x80" /* Enter kernel mode */
);
修改這個例子後,這次終於爲我工作:
asm(" movl $1,%eax;
xorl %ebx,%ebx;
int $0x80
"
);
感謝尋找並提供建議。
我不知道asm,但'%al'和'eax'是一樣的嗎?爲什麼用「C」標記? – pmg 2010-09-25 21:49:51
c標籤在那裏,因爲它被按原樣粘貼到c程序中,並用gcc編譯。 – healy 2010-09-25 22:03:45
請嘗試'int $ 0x80'而不是'int $ 80'。我很確定十進制符號是默認值。 – AndiDog 2010-09-25 22:17:17