【发布时间】:2021-12-12 11:28:09
【问题描述】:
我有一个简单的C程序如下:
int a = 10;
int b = 20;
int sum = 0;
void add() { sum = a + b; }
int main() {
add();
return 0;
}
我使用以下命令为 risc-v 编译它,并指定 .text 段应该从 0x1000 开始。
riscv32-unknown-elf-gcc -static -T elf32lriscv.x -Wl,-Ttext-segment=0x1000 -Wl,-Map=add.elf.map -o add.elf add.c
如果我使用 gdb 打印文件的信息,我会看到以下内容:
(gdb) i files
Symbols from "/home/mango/myp/risc-v/prog/add.elf".
Local exec file:
`/home/mango/myp/risc-v/prog/add.elf', file type elf32-littleriscv.
Entry point: 0x108c
0x00001074 - 0x0000159c is .text
0x0000259c - 0x000025a0 is .eh_frame
0x000025a0 - 0x000025a8 is .init_array
0x000025a8 - 0x000025ac is .fini_array
0x000025b0 - 0x000029d8 is .data
0x000029d8 - 0x000029ec is .sdata
0x000029ec - 0x000029f0 is .sbss
0x000029f0 - 0x00002a0c is .bss
有没有一种简单的方法可以将内存从0x1074转储到0x2a0c?
dump memory 命令需要一个开始和结束地址,但由于这会根据程序而变化,我希望能够自动转储这个值。此外,这在 gdb 中显然可以访问,有没有办法自动获取它?
我的最终目标是为 gdb 创建一个命令文件并按如下方式传递它以自动进行内存转储:
gdb --command=gdb_commands <filename>
【问题讨论】: