pwndbg
pwndbg是gdb的一个拓展,使用体验比gdb好很多。使用文档。
查看static变量存储在哪儿
编写一个测试程序staticMemberInClass.cpp。
class TestClass
{
public:
static int static_member;
};
int TestClass::static_member = 20;
int main()
{
TestClass::static_member = 30;
}
编译g++ -g staticMemberInClass.cpp -o staticTest.o
调试gdb ./staticTest.o
在main函数处打断点,b main
运行r
这个输出结果就人性化很多了
vmmap查看虚拟内存映射
可以看到是没有堆的,使用heap查看堆
进一步证实了此时确实还没有堆
p &TestClass::static_member查看静态成员的地址
结合汇编代码
运行到此处时,p $rip+0x2ed5查看将0x1e也就是30存在哪个地址了
算上dword正好是static_member的地址
x/wd 0x555555558010查看一下该地址的值
多方面都印证了static_member存储在这个地址
vmmap查看一下0x555555558010在属于哪个部分
很明显存储在数据段中。