Assembly Gdb-打印数组或数组元素,具有不同大小的元素
汇编代码(Assembly Gdb-打印数组或数组元素,具有不同大小的元素,assembly,gdb,Assembly,Gdb,汇编代码(yasm): src数组的每个元素是1字节 在GDB中,如何打印整个数组或指定索引处的元素,例如打印值为2的元素。(好的,在@Michael Petch的允许下,我想自己给出一个答案,以便将来的搜索者更加清楚) 代码和答案适用于x86-64linux系统,变量在汇编.data部分中定义 代码 tmp.asm(yasm) 在GDB中打印数组或数组元素 在GDB中: p命令将变量视为4字节 x命令将变量视为8字节 所以,需要不同的方式来打印大小为1/2/4/8字节的数字 示例命令:
yasm
):
src
数组的每个元素是1字节
在GDB
中,如何打印整个数组或指定索引处的元素,例如打印值为2的元素。(好的,在@Michael Petch的允许下,我想自己给出一个答案,以便将来的搜索者更加清楚)
代码和答案适用于x86-64linux系统,变量在汇编.data
部分中定义
代码 tmp.asm(yasm)
在GDB中打印数组或数组元素 在GDB中:
命令将变量视为4字节李>p
命令将变量视为8字节x
用于4个字节。p
,将p/x c
打印为4字节,这是默认值c
带强制转换,用于1/2字节p
,将p/x(char)a
打印为1字节a
,以2字节打印p/x(short)b
b
用于8字节x
,将x/x&d
打印为8字节,这是默认值d
用于1/2/4字节x
,将x/bx&a
打印为1字节a
,将x/hx&b
打印为2字节b
,将x/wx&c
打印为4字节c
用于阵列p
,打印长度为4的数组,包含4字节的元素,这是默认值p/x arr_c@4
,将p/x(char[4])arr_a
打印为长度为4的数组,包含1字节的元素arr_a
,将p/x(short[4])arr_b
打印为长度为4的数组,包含2字节的元素arr_b
,将p/x(长[4])arr\u d
打印为长度为4的数组,包含8字节的元素arr\u d
用于单个数组元素p
,将p/x((long[4])arr\u d)[1]
视为长度为4的数组,包含8字节的元素,并打印索引为1的元素arr\u d
- 似乎
可以打印8字节数组,但不能正确打印单个8字节值(这不是数组的一部分)。在这种情况下,请改用p
x
(这只是在我的机器上测试的,如果有任何问题,请随时更正。)
p/x(char[3])src
?打印3个元素的整个数组。@MichaelPetch酷!似乎p/x((char[4])src)[1]
可以打印数组的单个元素。如果你把它作为一个答案,我会接受的。请随意给出答案。很高兴它有帮助。如果string
是字节数组,则可能重复x/s&string
。
section .data
src db 1,2,3
; 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