首页
社区
课程
招聘
[求助]GDB如何修改位于rdata的宏定义字符串的值
发表于: 2015-10-5 22:30 4064

[求助]GDB如何修改位于rdata的宏定义字符串的值

2015-10-5 22:30
4064
//test.c
#define STR "testabc123"
int main(int argc, char* argv[])
{
        printf("%s\n",STR);
        return 0;
}

gcc -o test test.c

gdb test

1、通过info files命令得到内存映射表,获知字符串"testabc123"的内存地址为0x403060
(gdb) find 0x00403000,0x004032f8,"testabc123"
0x403060
1 pattern found.
(gdb) x/1s 0x403060
0x403060:       "testabc123"

2、现在希望修改字符串的值,gdb总是提示内存为只读,请问如何破?
(gdb) mem 0x403060 0x403070 rw
(gdb) set *0x403060=90
Cannot access memory at address 0x403060

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 56
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
虽然不懂 还是帮忙顶一下
2015-10-6 08:05
0
雪    币: 296
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
估摸宏进到内存加只读锁了,如果只是想改字符串的话可以在文件里改,用GDB的话就难讲了
2015-10-6 11:47
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
在Windows下用ollydbg这类工具,只读内存也可以修改它的值,gdb不可以做到吗?
2015-10-8 07:22
0
雪    币: 296
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
了解了下,set *point 这里指针地址需要做类型转换,另外赋值不知道支不支持十进制哦,你可以试试set *(char)point=0x5A
2015-10-8 10:27
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
试过也是不行的,Cannot access memory这个错误跟类型没有关系
2015-10-8 11:45
0
游客
登录 | 注册 方可回帖
返回