一个有意思的汇编问题

 

 .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语言打印的地址数据段中后面被编译器加了很多乱七八糟的信息(如编译器的信息)。这是把汇编产生的结果冲定向到文件中的显示:
结果显示
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值