这个实验是在32位的Linux上。如何更改gcc生成的asm代码的入口点?
我想对asm级别进行转换,并且在调用函数主要之前尝试执行 我的转换。
目前我正在尝试一种新的切入点进行编程,实现我转换代码, ,并希望在新的切入点,可以成功地调用主要
基本的GCC生成的汇编代码的默认入口点是主要的,我举一个例子如下:
的C代码:
int main()
{
return 0;
}
我使用该命令来生成汇编代码:
gcc -masm=intel -fno-asynchronous-unwind-tables -S main.c
,这是我得到了什么:
.file "main.c"
.intel_syntax noprefix
.text
.globl main
.type main, @function
main:
push ebp
mov ebp, esp
mov eax, 0
pop ebp
ret
.size main, .-main
.ident "GCC: (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3"
.section .note.GNU-stack,"",@progbits
谁能告诉我如何实现一个新的切入点(可能是一个功能similiar像_start)和呼叫主要末这个新的入口点?
谢谢!
相关:http://stackoverflow.com/questions/8116648/ – Nemo
你将如何调用你的新入口点?否则,考虑重写'crt * .o'启动。学习GCC 4.8.2源代码! –
当你链接你的代码时,你可以使用'-e'开关决定入口点... 例如:'ld -o output_file_name obj_file.o -lc -dynamic-linker /lib/ld-linux-so.2 -e _start' – Sam