每天学点GDB(七)
近两周在做一个trouble shooting,需要对函数调用栈进行分析以找出入参和局部变量。因为在编译生成可执行程序的时候,用gcc进行了O2的优化,许多假设的函数调用栈模型都不成立了。花了一番周折,终于正确的翻译出入参和局部变量,此一旅程中的一些经验还是值得记录下来。
一个有趣的过程 movq %rcx, %gs:0x80000000不能通过编译
# movq %rcx, %gs:0x80000000不能通过编译
今天有同事提问, 为什么
```
movq %rcx, %gs:0x7fffffff //可以通过编译
movq %rcx, %gs:0x80000000 //不能通过编译
```
其实就是一个立即数的差别, 应该是无差的, 好吧, 让我们来研究一下
# 第一步
先看一下```movq %rcx, %g
操作系统的中断处理
/*
define SAVE_ALL
"cld; \n\t"
"pushq %rax; \n\t"
"pushq %rax; \n\t"
"pushq %es, %rax; \n\t"
"pushq %rax; \n\t"
"pushq"
.