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

1万+

被折叠的 条评论
为什么被折叠?



