正在gdb中转储内存-如何在运行时选择文件名
我正在运行一个对文件进行处理的程序。 我希望能够为程序提供多个文件,通过使用gdb附加到程序,我希望在代码中的某个点为每个文件获得内存转储。我希望每个文件的转储都转到与输入文件具有相同文件名的文件(可能在格式化它之后,比如添加后缀) 因此,假设我有一个名为HereIsTheFileName(char*filename)的函数和另一个名为DumpThisMemoryRegion(void*startAddr,void*endAddr)的函数,我想执行如下操作: 要获取环境变量的文件名,请执行以下操作:正在gdb中转储内存-如何在运行时选择文件名,gdb,Gdb,我正在运行一个对文件进行处理的程序。 我希望能够为程序提供多个文件,通过使用gdb附加到程序,我希望在代码中的某个点为每个文件获得内存转储。我希望每个文件的转储都转到与输入文件具有相同文件名的文件(可能在格式化它之后,比如添加后缀) 因此,假设我有一个名为HereIsTheFileName(char*filename)的函数和另一个名为DumpThisMemoryRegion(void*startAddr,void*endAddr)的函数,我想执行如下操作: 要获取环境变量的文件名,请执行以下操
- 在此处断开文件名
- 命令1
- 设置$filename=malloc(strlen(filename)+1)
- 调用memcpy($filename,filename,strlen(filename)+1)
- 结束
- 断开此内存区域
- 命令2
- 追加二进制内存“%s.memory”%$filename startAddr endAddr
- 结束
谢谢 我不知道如何让append接受一个运行时文件名,但你总是可以通过将整个内容写入一个文件,然后使用日志记录来获取该文件的来源来进行欺骗 通过将其放入~/.gdbinit
define reallyappend
printf "using gdbtmp.log to dump memory to file %s\n", $arg0
set logging file gdbtmp.log
set logging overwrite on
set logging redirect on
set logging on
printf "append binary memory %s 0x%x 0x%x", $arg0, $arg1, $arg2
set logging off
set logging redirect off
set logging overwrite off
source gdbtmp.log
end
您可以改用reallyappend函数,例如
(gdb) set $filename = "somethingruntimegenerated"
(gdb) reallyappend $filename startAddr endAddr
我不知道日志记录在“命令”环境中是否正常工作,但您至少可以试一试。我不知道如何使append接受运行时文件名,但您总是可以通过将整个内容写入一个文件,然后使用日志记录来获取该文件,从而进行一些欺骗 通过将其放入~/.gdbinit
define reallyappend
printf "using gdbtmp.log to dump memory to file %s\n", $arg0
set logging file gdbtmp.log
set logging overwrite on
set logging redirect on
set logging on
printf "append binary memory %s 0x%x 0x%x", $arg0, $arg1, $arg2
set logging off
set logging redirect off
set logging overwrite off
source gdbtmp.log
end
您可以改用reallyappend函数,例如
(gdb) set $filename = "somethingruntimegenerated"
(gdb) reallyappend $filename startAddr endAddr
我不知道日志记录在“命令”环境中是否正常工作,但您至少可以试一试。是的,您不能在这里使用变量作为filename参数。 我能提供的最好的建议是写一个脚本 设置所有断点并设置“append”命令,以及 使用文本编辑或awk和sed在中设置文件名
脚本。是的,这里不能使用变量作为filename参数。 我能提供的最好的建议是写一个脚本 设置所有断点并设置“append”命令,以及 使用文本编辑或awk和sed在中设置文件名 剧本