当我try 调试C文件时,GDB在ARM助记符中调试它.我可以将其更改为x86吗,还是只能使用ARM助记符?我有一台ARM64 M1 MacBook.

(gdb) disas main
Dump of assembler code for function main:
   0x0000000100003f44 <+0>: sub sp, sp, #0x30
   0x0000000100003f48 <+4>: stp x29, x30, [sp, #32]
   0x0000000100003f4c <+8>: add x29, sp, #0x20
   0x0000000100003f50 <+12>:    mov w8, #0x0                    // #0
   0x0000000100003f54 <+16>:    str w8, [sp, #12]
   0x0000000100003f58 <+20>:    stur    wzr, [x29, #-4]
   0x0000000100003f5c <+24>:    mov w8, #0xf                    // #15
   0x0000000100003f60 <+28>:    stur    w8, [x29, #-8]
   0x0000000100003f64 <+32>:    mov w8, #0xc                    // #12
   0x0000000100003f68 <+36>:    stur    w8, [x29, #-12]
   0x0000000100003f6c <+40>:    ldur    w8, [x29, #-8]
   0x0000000100003f70 <+44>:    ldur    w9, [x29, #-12]
   0x0000000100003f74 <+48>:    add w8, w8, w9
   0x0000000100003f78 <+52>:    str w8, [sp, #16]
   0x0000000100003f7c <+56>:    ldr w9, [sp, #16]
   0x0000000100003f80 <+60>:    mov x8, x9
   0x0000000100003f84 <+64>:    mov x9, sp
   0x0000000100003f88 <+68>:    str x8, [x9]
   0x0000000100003f8c <+72>:    adrp    x0, 0x100003000
   0x0000000100003f90 <+76>:    add x0, x0, #0xfb4
   0x0000000100003f94 <+80>:    bl  0x100003fa8
   0x0000000100003f98 <+84>:    ldr w0, [sp, #12]
   0x0000000100003f9c <+88>:    ldp x29, x30, [sp, #32]
   0x0000000100003fa0 <+92>:    add sp, sp, #0x30
   0x0000000100003fa4 <+96>:    ret
End of assembler dump.

推荐答案

是的,你被困在你电脑的本机指令集上了.

低级指令集本质上依赖于机器;您的AArch64CPU完全无法理解非ARM的指令,如AMD64指令.虽然可以将您正在调试的AArch64代码转换为AMD64代码,但这样做会使"反汇编"不再与您的调试相关,因为它不是您的处理器实际执行的.

C++相关问答推荐

为什么listen()(在调用accept()之前)足以让应用程序完成3次握手?

malloc实现:判断正确的分配对齐

exit(EXIT_FAILURE):Tcl C API类似功能

以前版本的tty_ldisc_ops.ioctl()是否也需要文件参数?

核心转储文件中出现奇怪的大小变化

在C中将通用字符名称转换为UTF-8

什么是.c.h文件?

CGO:如何防止在使用CGO在包中包含C头文件时出现多个定义...&q;错误?

如何用c语言修改shadow文件hash部分(编程)?

编译器如何处理具有更复杂值的枚举?

使用nmake for程序比Hello World稍微复杂一些

我在反转双向链表时遇到问题

试图创建一个基本的Word克隆,但遇到了障碍

Go和C中的数据 struct 对齐差异

如果格式字符串的内存与printf的一个参数共享,会发生什么情况?

try 判断长整数是否为素数

我错误地修复了一个错误,想了解原因

const struct 成员的 typedef 中的灵活数组大小

使用 GCC 将一个函数中初始化的 struct 体实例通过指针传递到 C 中的另一个函数会产生不同的结果

int 与 size_t 与 long