汇编代码( yasm):
section .data
src db 1,2,3
Run Code Online (Sandbox Code Playgroud)
数组的每个元素src都是 1 个字节。
在 中GDB,如何打印整个数组或指定索引处的元素,例如打印值为 2 的元素。
(好吧,我想在 @Michael Petch 的许可下自己给出一个答案,以便让未来的搜索者更清楚)
代码和答案适用于x86-64 Linux 系统,变量在汇编部分定义.data。
tmp.asm ( yasm )
; yasm assembly program,
; compile: yasm -f elf64 -g dwarf2 tmp.asm && ld tmp.o
; execute: ./a.out
section .data
a db 1
b dw 2
c dd 4
d dq 0x1234567890abcde
arr_a db 1,2,3,4
arr_b dw 1,2,3,4
arr_c dd 1,2,3,4
arr_d dq 1,2,3,0x1234567890abcde
section .text
global _start
_start:
mov rax,1
; exit
mov eax,1
mov ebx,5
int 0x80
Run Code Online (Sandbox Code Playgroud)
在GDB中:
p命令将变量视为4 字节;x命令会将变量视为8 字节。所以,需要不同的方式来打印一些大小为1/2/4/8字节的数据。
命令示例:
p为 4 个字节。
p/x c,打印c为 4 字节,这是默认值。p带强制转换,用于 1 / 2 字节
p/x (char)a, 打印a为 1 个字节p/x (short)b,打印b为2字节x8字节
x/x &d,打印d为 8 字节,这是默认值。x1 / 2 / 4 字节
x/bx &a,打印a为 1 个字节,x/hx &b,打印b为 2 个字节,x/wx &c,打印c为 4 字节,p对于数组
p/x arr_c@4,打印arr_c为长度为 4 的数组,包含 4 个字节的元素,这是默认值。p/x (char[4])arr_a,打印arr_a为长度为 4 的数组,包含 1 个字节的元素,p/x (short[4])arr_b,打印arr_b为长度为 4 的数组,包含 2 个字节的元素,p/x (long[4])arr_d,打印arr_d为长度为 4 的数组,包含 8 个字节的元素,p对于单个数组元素
p/x ((long[4])arr_d)[1],视为arr_d长度为4的数组,包含8个字节的元素,并打印索引为1的元素。尖端:
p可以打印 8 字节数组,但无法正确打印单个 8 字节值(不是数组的一部分)。在这种情况下,请x改用。(这只是在我的机器上测试的,如果有问题请随时纠正。)
| 归档时间: |
|
| 查看次数: |
5963 次 |
| 最近记录: |