【发布时间】:2014-01-11 07:07:36
【问题描述】:
本实验是在 32 位 Linux 上进行的。
我想在 asm 级别上进行转换,我正在尝试实现 我在调用函数 main 之前的转换。
目前我正在尝试编写一个新的入口点,实现我的转换代码, 并希望这个新的入口点能够成功调用main
gcc生成的汇编代码的默认入口点基本上是main,我举个例子如下:
c 代码:
int main()
{
return 0;
}
我用这个命令生成asm代码:
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
谁能告诉我如何实现一个新入口点(可能是一个类似于_start的函数)并在这个新入口点的末尾调用main? p>
谢谢!
【问题讨论】:
-
如何调用你的新入口点?否则考虑重写
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 嗨,ASM,我对代码进行了修改,但它只是在启动函数结束时崩溃了...我不知道发生了什么...
-
@SAM 我发布了我的问题here,你能帮帮我吗?谢谢!
标签: linux gcc assembly nasm gnu-assembler