我正在调试使用 GDB (arm-none-eabi-gdb) 在 Rust 中编译的程序。有一次,我想写入一个内存地址,如下所示:
(gdb) set *((int *) 0x24040000) = 0x0000CAFE
syntax error in expression, near `) 0x24040000) = 0x0000CAFE'.
Run Code Online (Sandbox Code Playgroud)
经过多次尝试,我发现我正在转换 C 风格,我必须将其转换为 Rust 风格,如下所示:
set *(0x24040000 as *mut i32) = 0x0000CAFE
Run Code Online (Sandbox Code Playgroud)
我的问题是 GDB 如何解释不同的命令以及为什么会出现此错误。是不是因为符号(int)无法识别,但是在这种情况下,gdb如何加载符号?gdb 是否需要将指令编译为目标上运行的二进制文件的正确语言?
是的,这取决于语言,并且语言是从加载的源文件的文件名推断出来的。
\n\n引用手册:
\n\n\n\n\n\n
和:
\n\n\n\n\n如果您不想查看分配的值,请使用
\nset命令而不是命令set实际上与 相同,
和:
\n\n\n\n\n对于某些语言,GDB 中内置了特定于语言的信息,允许您在程序\xe2\x80\x99 的本机语言中表达类似上面的操作,并允许 GDB 以与程序语法一致的方式输出值\xe2 \x80\x99 的母语。用于构建表达式的语言称为工作语言。
\n
和:
\n\n\n\n控制工作语言\xe2\x80\x94有两种方法,要么让GDB自动设置,要么自己手动选择。您可以使用设置语言命令来达到任一目的。启动时,GDB 默认自动设置语言。
\n\n[..]大多数情况下,GDB 从文件名推断语言。
\n
| 归档时间: |
|
| 查看次数: |
1070 次 |
| 最近记录: |