小编All*_*uer的帖子

在没有符号的设备上调试iOS应用程序

我需要在实际设备上调试ios应用程序的启动...并且通过启动我的意思是当操作系统控制应用程序时执行的第一条指令.不是"主要".此外,此应用程序没有任何符号(即调试信息不​​可用..).我不在乎是否必须在CPU指令级调试.我知道该怎么做(已经做了30多年).我希望调试器在控件即将传输到应用程序时停止.当我使用Attach | by Name命令运行时,它只是说"完成运行".

哦,这个应用程序不是在XCode中构建的.然而,它我构建,签名和配置并移动到设备的应用程序.应用程序运行,因为我可以看到控制台输出.万一你以为我是一个黑客试图调试别人的应用程序.

这对于一个高级订单怎么样?我敢打赌,没有人可以回答这个问题......我无法找到任何有关如何使用XCode构建的项目执行此操作的信息.我想知道苹果霸主是否根本不可能或"允许"它?

你怎么说,Stack Overflow众神?

更新:我应该澄清一些事情.此应用程序不是使用任何商用或开源工具构建的.我与工具供应商合作创建编译器,框架和IDE.IOW,你不能得到这个工具...... 在引导新工具链的过程中,必须经常采用一些非常低级的原始调试.特别是如果工具生成的代码中存在错误.

delphi xcode ios lldb

32
推荐指数
2
解决办法
4936
查看次数

为什么Mac ABI需要x86-32的16字节堆栈对齐?

我可以理解旧PPC RISC系统的这个要求,甚至是x86-64,但是对于旧的,经过验证的x86?在这种情况下,堆栈只需要在4字节边界上对齐.是的,某些MMX/SSE指令需要16字节对齐,但如果这是被调用者的要求,则应确保对齐正确.为什么要为每个来电者增加这项额外要求?这实际上可能会导致性能下降,因为每个呼叫站点都必须管理此要求.我错过了什么吗?

更新:在对此进行一些调查并与一些内部同事进行一些咨询后,我对此有一些理论:

  1. PPC,x86和x64版操作系统之间的一致性
  2. 似乎GCC codegen现在始终执行子esp,xxx然后将数据"移动"到堆栈而不是简单地执行"推送"指令.在某些硬件上,这实际上可能更快.
  3. 虽然这确实使调用站点变得复杂,但是当使用默认的"cdecl"约定时,调用者清理堆栈时几乎没有额外的开销.

我对最后一项的问题是,对于依赖于被调用者清理堆栈的调用约定,上述要求实际上 "uglify"了codegen.例如,某些编译器决定为自己的内部使用实现更快的基于寄存器的调用样式(即任何不打算从其他语言或源调用的代码)?这种堆栈对齐可能会通过在寄存器中传递一些参数来抵消一些性能提升.

更新:到目前为止,唯一真正的答案是一致性,但对我来说,答案有点太容易了.我有超过20年的x86架构经验,如果一致性,而不是性能,或其他具体的东西,那么我真的是因为我恭敬地建议开发人员要求它有点天真.他们忽略了近三十年的工具和支持.特别是如果他们期望工具供应商能够快速轻松地为他们的平台调整他们的工具(可能不是......这 Apple ......),而不必跳过几个看似不必要的箍.

我会在另一天左右给出这个话题,然后关闭它......

有关

macos stack alignment abi calling-convention

31
推荐指数
3
解决办法
6714
查看次数

标签 统计

abi ×1

alignment ×1

calling-convention ×1

delphi ×1

ios ×1

lldb ×1

macos ×1

stack ×1

xcode ×1