您的位置:首页 > 其它

一个有意思的汇编问题

2011-02-23 21:47 211 查看
.section .data
output:
.ascii "what the fuck~!!/n"
.section .text
.global main
main:
movl $4,%eax #syscall_write
movl $1,%ebx #(fd = 1 )== stdout
movl $output,%ecx #string addr
movl $1000,%edx #size,but overflow?
int $0x80
movl $1,%eax
movl $0,%ebx
int $0x80
/*对应c代码为*/

#include <unistd.h>
#include <string.h>
int main()
{
char *buf = "what the fuck~!!";
write(1,buf,1000);
}
为什么c语言编译后的可执行代码会溢出(打出n多垃圾...)汇编代码产生的可执行打印正确的字符串。

编译都为命令:
gcc -o
呼呼,经过大神的帮助,终于把这个问题搞出来了,实际上汇编也打印了后面地址中的字符了,只不过这些字符是非显示的字符。而c语言打印的地址数据段中后面被编译器加了很多乱七八糟的信息(如编译器的信息)。这是把汇编产生的结果冲定向到文件中的显示:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: