2
測試平臺是32位Linux。爲什麼我的代碼會在啓動函數結束時崩潰?
基本上,我做了修改,以產生所述入口點從如下主到開始改變彙編代碼的gcc:
彙編代碼:
.file "test.c"
.intel_syntax noprefix
.section .rodata
.LC0:
.string "%d\n"
.text
.globl start
.type start, @function
start:
push ebp
mov ebp, esp
call main
mov eax, 0
leave
ret
.size start, .-start
.globl main
.type main, @function
main:
push ebp
mov ebp, esp
and esp, -16
sub esp, 32
mov DWORD PTR [esp+28], 1
mov eax, OFFSET FLAT:.LC0
mov edx, DWORD PTR [esp+28]
mov DWORD PTR [esp+4], edx
mov DWORD PTR [esp], eax
call printf
mov eax, 0
然後我使用這些編譯和鏈接:
as test.s -g -o test.o
ld -o test test.o -lc -dynamic-linker /lib/ld-linux.so.2 -e start
當使用gdb進行調試時,它可以成功地運行ķ直到月底開始功能, 然後從調試信息似乎$ EIP不知道從哪裏下跳,和 段發生故障時...
任何人都可以給我一些這方面的幫助問題..? 非常感謝!
是的!謝謝secmask! – computereasy