gdb无法访问qemu-arm模拟器中运行的程序的内存

时间:2014-09-09 16:23:37

标签: assembly gdb embedded arm qemu

我想模仿一个' C'程序使用qemu指令级模拟器。' C'通过发出以下命令来编译程序

arm-none-linux-gnueabi-gcc -g ex_qsort.c -o ex_qsort_lin_work

然后我使用以下命令启动qemu

" qemu-arm -g 1234 -L / path / to / codesourcery / arm-none-linux-gnueabi / libc ./ex_qsort_lin_work"

然后我使用gdb连接到程序。我试图访问程序内存位置并更改汇编代码。但是当我尝试访问内存时,我收到以下错误

   (gdb) x 0x00008510
   0x8510 <main+76>:    0xe3530004
   (gdb) set *(0x8510) = 0xe3530002
   Cannot access memory at address 0x8510 

我不确定为什么会出现此错误。 Gdb没有给出任何其他警告。当我启动gdb时,我将sysroot指向arm库。但是,当我检查共享库时,我收到以下消息

   (gdb) info sharedlibrary 
   From        To          Syms Read   Shared Object Library
   0xf67d67d0  0xf67f0f58  Yes (*)     /path/to/codesourcery/arm-none-linux-gnueabi/libc/lib/ld-linux.so.3
   (*): Shared library is missing debugging information.

不确定这是否会导致问题。静态链接库也没有帮助 我的目标是改变给定地址的指令

1 个答案:

答案 0 :(得分:1)

问题是您尝试修改的内存是只读的。看起来您正在尝试修改可执行文件的文本段中的代码,该代码通常是只读映射的,因此这不是意料之外的。如果您希望能够修改它,则需要将其映射为可写。

您可以通过链接-N标记来构建具有可写文本段的可执行文件(因此默认情况下将加载为可写) - 使用您的-Xlinker -N-Wl,-N gcc命令行。