【发布时间】:2014-05-04 08:57:09
【问题描述】:
我这里写的是一个简单的代码:
printf.asm
[EXTERN main]
section .text
global _start
_start:
call main
add esp, 8
mov eax, 1
xor ebx, ebx
int 80h
和main.c
#include <stdio.h>
int main()
{
char* str = "print from C :\\)";
printf("%s", str);
}
我这样编译代码:
nasm -g -f elf printf.asm -o printf.o
gcc -c -o main.o main.c
ld -o printf printf.o main.o -lc -I/lib/ld-linux.so.2
然后运行:
./printf
在终端上没有打印任何内容。为什么?
当我使用以下命令链接 ld -Ttext 0x1000 -o printf printf.o main.o -lc -I/lib/ld-linux.so.2 时,它会显示“Killed”字符串。如何解决这个问题?
成功获取的代码刚刚在 printf 函数中添加了一个换行符:printf("%s\n", str);。谢谢大家,问题解决了。
【问题讨论】:
-
您是否尝试在 main() 开头放置断点并使用调试器查看是否到达那里?
标签: c assembly compilation linker nasm