永发信息网

gdb格式文件怎么修改里边数据

答案:2  悬赏:80  手机版
解决时间 2021-11-17 16:17
gdb格式文件怎么修改里边数据
最佳答案
gdb是interbase的数据库文件,需要在数据库中打开。
  在SQL Explorer中新建一个数据库连接,随便取个名字就可以,然后把它的数据库文件(SERVER NAME)指向你这个GDB文件,用户名没有改默认的话设置为SYSDBA,保存。然后双击这个连接即可打开,默认的密码是masterkey。当然,在这之前你必须先运行Interbase Server,而且Interbase还有版本之分,IB6以上的不能打开以前版本的数据库文件的,出现这种情况就换一下不同版本的Interbase试试。
还有一个笨办法,把后缀名改成.rar,解压即可
全部回答
直接修改可执行文件中的代码和变量好像也没有什么比较好的工具,今天leviathan问我用“set write on”相关的问题,我才发现GDB就是可以很方便完成这个工作的工具,下面我向大家介绍一下使用方法。
另,在GDB文档中介绍这个方法也能修改CORE文件的内容,但即使我读了这块的代码,还是对修改CORE文件毫无思路也没成功过,所以本文就不介绍对CORE文件的修改了。

在一般情况下GDB是以只读方式打开可执行文件的,如果需要改变可执行文件,需要在读入文件以前,用GDB启动参数“--write”或者命令“set write on”用可读写方式打开可执行文件。如果文件已经打开了可执行文件,就需要使用exec-file重新以读写方式打开可执行文件,注意如果你还没打开可执行文件,就一定要使用file命令读入,因为exec-file不会重新读入符号信息。

还有要注意的是,因为修改只能修改section的内容,所以能修改的变量只能是非0的全局变量,内容是O的变量会被放入bss。

下面举例修改变量内容:
cat 1.c
#include
int a = 1;
int
main(int argc,char *argv[],char *envp[])
{
printf ("%d\n", a);
return 0;
}
gcc -g 1.c
./a.out
1 #注意这个输出
gdb
GNU gdb 6.8-debian
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
(gdb) set write on #打开功能
(gdb) file ./a.out #打开文件
Reading symbols from /home/teawater/gdb/a.out...done.
(gdb) p a = 100 #修改变量的文件中的值
$1 = 100
./a.out
100 #注意修改后的输出

下面举例修改代码内容:
cat 1.c
#include
void
cool (void)
{
printf ("Call function cool.\n");
}
int
main(int argc,char *argv[],char *envp[])
{
cool ();
return 0;
}
gcc -g 1.c
./a.out
Call function cool. #注意现在有输出
gdb --write ./a.out #使用--write直接打开可写功能
GNU gdb 6.8-debian
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu"...
(gdb) disas cool
Dump of assembler code for function cool:
0x000000000040050c : push %rbp #注意改之前这条指令
0x000000000040050d : mov %rsp,%rbp
0x0000000000400510 : mov $0x40062c,%edi
0x0000000000400515 : callq 0x4003f8
0x000000000040051a : leaveq
0x000000000040051b : retq
End of assembler dump.
(gdb) set *(unsigned char *)(0x000000000040050c) = 0xc3 #修改指令
(gdb) disas cool
Dump of assembler code for function cool:
0x000000000040050c : retq #改之后这指令发生了变化
0x000000000040050d : mov %rsp,%rbp
0x0000000000400510 : mov $0x40062c,%edi
0x0000000000400515 : callq 0x4003f8
0x000000000040051a : leaveq
0x000000000040051b : retq
End of assembler dump.
./a.out #现在没有输出了 因为cool函数直接返回了
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
松木板材霉变 发黑
以撩开头的成语
最大输出功率45W*4声道的机头能推起克雷格B65
野生百合怎么凉晒
380V 10KW等于多小安 220V 5KW 等于多小安 怎
上海浦东新区亚联财小额贷款是不是骗子,今天
八戒日付网打码帐号被封了怎么办
喇叭裤都有哪些款式,怎么搭配最能展现时尚女
如何使用jquery设计两个对应的下拉菜单,
响应面结果如何分析
求英语三大百科全书(美国百科全书、不列颠百
东台新华书店艺术培训中心地址在哪,我要去那
汗里有毒吗?要改变命运,就要积阴德
祖冲之是画家还是数学家韩式圆周率还是《归牧
如果不能在一起,就不要给对方任何机会和希望
推荐资讯
王者荣耀会玩的关羽太可怕,你们五个小学生怕
从淄博周村到禹城汽车站自驾车走国到怎么走,
司夏海妖的歌 其中一段歌词是 割下头颅托诸英
什么离子会形成水合离子,水合离子怎么书写
九大爷平台怎么样啊?
有多少人娶了外地老婆
如何使用NTS-352全站仪
一个饭店怎样才能起死回生,
王阿姨早上上班时经过广场的钟楼 听到报时的
岭背艺彩照相馆地址有知道的么?有点事想过去
福库电饭煲型后缀 FG FV FS等 都代表什么意思
舟山渔民扑鱼是在内陆还是沿海
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?