【发布时间】:2012-05-06 17:32:24
【问题描述】:
我已经编写了一段 C 代码,我已经对其进行了反汇编,并阅读了寄存器以了解程序在汇编中是如何工作的。
int test(char *this){
char sum_buf[6];
strncpy(sum_buf,this,32);
return 0;
}
我一直在检查的代码是测试函数。当我反汇编我的测试函数的输出时,我得到...
0x00000000004005c0 <+12>: mov %fs:0x28,%rax
=> 0x00000000004005c9 <+21>: mov %rax,-0x8(%rbp)
... stuff ..
0x00000000004005f0 <+60>: xor %fs:0x28,%rdx
0x00000000004005f9 <+69>: je 0x400600 <test+76>
0x00000000004005fb <+71>: callq 0x4004a0 <__stack_chk_fail@plt>
0x0000000000400600 <+76>: leaveq
0x0000000000400601 <+77>: retq
我想知道mov %fs:0x28,%rax到底在做什么?
【问题讨论】:
标签: c gcc x86-64 buffer-overflow disassembly