是否可以在 Mac OS 上调试 x64 程序集?

2023-11-24

我希望能够在我的 Mac 上使用 Sierra 10.12.4 编写和调试 x64 程序集。人们可能会认为这不会是一个特别困难或晦涩的愿望,但尽管花费了很多时间的努力和大量的在线搜索,我仍然没有成功,而且我还没有找到其他人有这样的愿望。

我更喜欢使用 NASM 汇编器,但如果必须的话,我会使用 GAS 或任何具有 Intel 语法的东西。 (顺便说一句,请注意,gdb 和 lldb 都可以与 gcc 编译的 C 文件一起正常工作。)

这是我的情况和我尝试过的方法:

NASM 不起作用

我可以组装并链接一个文件并验证它是否有效。

$ nasm -f macho64 -g -F dwarf hello2.s -o hello2.o
$ gcc hello2.o -o hello2
$ ./hello2
Hello, world!

但我无法用 gdb 调试它(请注意,我确实做了所有必要的代码设计废话):

$ gdb hello2
GNU gdb (GDB) 8.0
<snip>
Reading symbols from hello2...done.
(gdb) list
1   section .data
2
3   msg: db "Hello, world!", 0
4
5   section .text
6       global _main
7       extern _puts
8
9   _main:
10      push    rbp
(gdb) break 10
Breakpoint 1 at 0x0: file hello2.s, line 10.
(gdb) run
Starting program: /Users/mike/GoogleDrive/Projects/Sort/hello2
[New Thread 0x1403 of process 38022]
warning: unhandled dyld version (15)
Warning:
Cannot insert breakpoint 1.
Cannot access memory at address 0x0

Command aborted.

我无法使用 lldb 调试它:

$ lldb hello2
(lldb) target create "hello2"
Current executable set to 'hello2' (x86_64).
(lldb) b hello2.s:10
Breakpoint 1: no locations (pending).
WARNING:  Unable to resolve breakpoint to any actual locations.

天然气不起作用

我可以组装、链接和运行:

$ gcc -g hello.s -o hello
$ ./hello
Hello, world!

但我无法使用 gdb 进行调试:

$ gdb hello
GNU gdb (GDB) 8.0
<snip>
Reading symbols from hello...Reading symbols from /Users/mike/GoogleDrive/Projects/Sort/hello.dSYM/Contents/Resources/DWARF/hello...done.
done.
(gdb) list
1   .intel_syntax
2   .text
3       .globl _main
4
5   _main:
6       push    rbp
7       mov rbp, rsp
8       lea rdi, [rip + _main.S_0]
9       call    _puts
10      mov rax, 0
(gdb) break 6
No line 6 in the current file.
Make breakpoint pending on future shared library load? (y or [n]) y
Breakpoint 1 (6) pending.
(gdb) run
Starting program: /Users/mike/GoogleDrive/Projects/Sort/hello
[New Thread 0x1403 of process 38063]
warning: unhandled dyld version (15)
Hello, world!
[Inferior 1 (process 38063) exited normally]

(所以它只是运行并忽略断点。)

我无法使用 lldb 调试它:

$ lldb hello
(lldb) target create "hello"
Current executable set to 'hello' (x86_64).
(lldb) b hello.s:6
Breakpoint 1: no locations (pending).
WARNING:  Unable to resolve breakpoint to any actual locations.

我在网上找到的东西

Here是一篇关于gdb不适用于新版本的 Mac 操作系统。

StackOverflow 有几个相关的老问题,但都没有提供足够的答案。

还有这种方式使用Xcode,这似乎奇迹般地有效......但它实际上并没有达到我想要的效果。调试器实际上并不知道我的源文件;它只是单步执行指令并显示反汇编代码或其他内容。我也不想使用XCode。

几个月前,我在 NASM 邮件列表上询问过这个问题,但没有人回复。

So...

那么目前是否无法做到人们可能想用计算机做的最基本的事情之一使用Mac?

如果有人有办法做到这一点,请准确地向我展示必要的命令。


奇迹中的奇迹,看来我可以用 clang 做到这一点:

$ clang -g -c -x assembler hello.s
$ clang hello.o -o hello
$ ./hello
Hello, world!
$ lldb hello
(lldb) target create "hello"
Current executable set to 'hello' (x86_64).
(lldb) b hello.s:10
Breakpoint 1: where = hello`main + 16, address = 0x0000000100000f7c
(lldb) run
Process 40460 launched: '/Users/mike/GoogleDrive/Projects/Sort/hello' (x86_64)
Hello, world!
Process 40460 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
    frame #0: 0x0000000100000f7c hello`main at hello.s:10
   7        mov rbp, rsp
   8        lea rdi, [rip + _main.S_0]
   9        call    _puts
-> 10       mov rax, 0
   11       mov rsp, rbp
   12       pop rbp
   13       ret

不幸的是,据我所知,clang 的 x64 程序集支持完全没有记录,我只能通过实验找出正确的咒语来做到这一点。但我想这确实是一件事。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否可以在 Mac OS 上调试 x64 程序集? 的相关文章

随机推荐

  • 检测android webview

    我有一个html javascript页面 我需要检测它何时在网络视图上打开 例如在 facebook webview twitter webview 等内部 以及如果它是一个 webview 显示另一个内容 Note 我不控制第三方 An
  • 错误:pandoc 文档转换失败,错误 43 Windows 7 R studio

    我在论坛中搜索了答案 但似乎不起作用 我正在 Rstudio 中使用 knit 包编织一个 pdf 文档 我使用的是 Windows 7 和 Rstudio pandoc exe Error producing PDF from TeX s
  • 整数除法大量用于什么?

    分析https ridiculousfish com blog posts benchmarking libdivide m1 avx512 html发现新的 Apple CPU 花费了大量资源来使整数除法速度大大加快 这是一件令人惊讶的事
  • 如何以编程方式向 UILabel 添加约束

    有没有一种方法可以快速获得标签并以编程方式对其进行约束 例如 在所有设备上 固定到顶部 或 固定到右侧 以便在所有设备上它只固定到正在使用的任何设备 这是因为我以编程方式创建了一个标签 所以我想对其进行约束 如果您需要更多信息 请告诉我 谢
  • d3 - 查看特定 x,y 位置有什么

    我正在尝试在 d3 树中实现一些拖放功能 其中当拖动节点时 如果它直接到节点左侧 50 像素 我想绘制一个虚线连接器来指示如果释放该节点应该是小时候搬到这里 为了做到这一点 我的想法是检查左侧 50 像素的元素 有没有办法查看 d3 中特定
  • 为什么无法通过新的 Azure 门户配置 Azure 诊断以使用 Azure 表存储?

    我正在开发一个将托管在 Azure 中的 Web api 我想使用 Azure 诊断将错误记录到 Azure 表存储中 在经典门户中 我可以将日志配置为转到 Azure 表存储 经典门户诊断设置 然而 在新的 Azure 门户中 我唯一的存
  • 在Windows Azure中使用Redis实现进程外缓存

    我一直在开发一个网页 该网页显示我在天蓝色云中的数据库中的表格 为了减少直接调用数据库以提高性能我想为页面构建一个缓存 目前 我拥有一个内存缓存 进程内 reads表的 现在我想创建一个进程外缓存 应该从什么时候更新writes进行 意味着
  • 使用 caret 包应用 k 折交叉验证模型

    首先我要说的是 我读过很多关于交叉验证的帖子 但似乎存在很多混乱 我的理解很简单 执行 k 倍交叉验证 即 10 倍 以了解 10 倍的平均误差 如果可以接受 则在完整的数据集上训练模型 我正在尝试使用构建决策树rpart在 R 中并利用c
  • JQuery:元素处于视图中时触发操作

    在我网站的页脚中 我使用 counUp js 链接 http inorganik github io countUp js 来计算三个数字 我在网站底部添加了这段代码
  • Primefaces 使用 CSS 样式化组件类

    如何使用 CSS 更改组件的属性 假设我有两个按钮
  • 取同一天 pandas 内数据的平均值

    我有一个数据框df包含测量日期和测量值 duration km df Out 20 Date duration km 0 2015 03 28 09 07 00 800001 0 0 1 2015 03 28 09 36 01 819998
  • OLEDB 连接字符串中的 IMEX 是什么?

    Provider Microsoft Jet OLEDB 4 0 Data Source localhost Extended Properties Excel 8 0 HDR Yes IMEX 2 目的是什么IMEX 2在上面的连接字符串
  • 使 SQL Server 索引较小

    我们在一个项目中使用 SQL Server 2005 系统的用户能够使用 关键字 搜索某些对象 我们实现这一点的方法是为每个表中可能包含这些 关键字 的重要列创建一个全文目录 然后使用 CONTAINS 搜索用户在该索引的搜索框中输入的关键
  • 对 super() 的调用必须是构造函数主体中的第一条语句

    我正在编写一个 LoginRequest 类的构造函数 它扩展了一个名为 JsobObjectRequest 的类 来自 Android 中的 Volley 框架 但这与问题完全无关 使用此代码 public LoginRequest St
  • 删除附有foreign/Hmisc SPSS导入功能的变量标签

    像往常一样 我得到了一些 SPSS 文件 并将其导入到 R 中spss get函数来自Hmisc包裹 我很烦恼labelled类那个Hmisc spss get添加到所有变量data frame 因此想要将其删除 labelled当我尝试跑
  • 如何在Rmarkdown中添加目录?

    我正在使用 RStudio 编写 Markdown 文档 并希望在文档顶部添加目录 TOC 以便用户可以单击相关部分进行阅读 rpubs 上有一些相关的例子 但现在我似乎找不到它们 请注意 我不使用pandoc我很新Rmd knitr 有没
  • 如何以编程方式检测 Office 2019?

    我们习惯于通过获取完整版本 例如从已安装的 Office 可执行文件的文件信息 来检测当前安装的 Office 版本 并将主要版本映射到友好名称 例如 15 映射到 Office 2013 16 映射到 Office 2016 不过 Off
  • 使用 Jena 获得对类的 OWL 限制

    使用披萨本体论 我希望能够查找所有的配料American比萨 如果我在 Prot g 中打开本体 我可以看到American披萨有以下限制 hasTopping some MozerellaTopping hasTopping some T
  • R 使用 readHTMLTable 时出错

    我正在使用以下代码 url http finance yahoo com q op s DIA m 2013 07 library XML tabs readHTMLTable url stringsAsFactors F 我收到以下错误
  • 是否可以在 Mac OS 上调试 x64 程序集?

    我希望能够在我的 Mac 上使用 Sierra 10 12 4 编写和调试 x64 程序集 人们可能会认为这不会是一个特别困难或晦涩的愿望 但尽管花费了很多时间的努力和大量的在线搜索 我仍然没有成功 而且我还没有找到其他人有这样的愿望 我更