相关疑难解决方法(0)

本机代码,机器代码和汇编代码之间有什么区别?

我对.NET语言环境中的机器代码和本机代码感到困惑.

他们之间有什么区别?它们是一样的吗?

.net assembly bytecode machine-code

96
推荐指数
4
解决办法
4万
查看次数

如何从目标文件中读取Mach-O头?

过去几天我一直在试验装配,现在了解装配和机器代码之间的关系(在OSX上通过NASM使用x86,阅读英特尔文档).

现在我试图了解链接器如何工作的细节,特别是想要了解Mach-O目标文件的结构,从Mach-O头开始.

我的问题是,你能否将下面的Mach-O标头映射到otool命令输出(显示标题,但它们的格式不同)?

这个问题的一些原因包括:

  • 它将帮助我了解"Mach-O标头结构"上的文档如何在真实世界的目标文件中查看.
  • 它将简化理解的道路,因此我和其他新人不必花费很多时间或几天想知道"他们是指这个还是这个 "类型的东西.如果没有以前的经验,很难将一般的Mach-O文档精神翻译成现实世界中的实际目标文件.

下面我展示了我尝试从真实对象文件解码Mach-O头的示例和过程.在下面的描述中,我试图显示出现的所有小/微妙问题的提示.希望这将提供一种对新手如此混淆的感觉.


从一个名为的基本C文件开始example.c:

#include <stdio.h>

int
main() {
  printf("hello world");
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

gcc example.c -o example.out它编译,它给出:

cffa edfe 0700 0001 0300 0080 0200 0000
1000 0000 1005 0000 8500 2000 0000 0000
1900 0000 4800 0000 5f5f 5041 4745 5a45
524f 0000 0000 0000 0000 0000 0000 0000
0000 0000 0100 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 …
Run Code Online (Sandbox Code Playgroud)

c macos executable

13
推荐指数
1
解决办法
6184
查看次数

JIT编译如何在运行时实际执行机器代码?

我理解JIT编译的工作原理(在阅读了这个SO问题之后的资源).但是,我仍然想知道它是如何在运行时实际执行机器代码的?

我没有深入的操作系统或编译器优化背景,也没有直接使用机器代码做任何事情,但我开始探索它.我已经开始在汇编中玩,看看像NASM这样的东西可以把你的汇编代码编译成机器代码(可执行文件),然后你可以从命令行"调用"它./my-executable.

但是JIT编译器在运行时实际上是如何做到的呢?是将流机器代码转换为stdin还是其他东西,或者它是如何工作的?如果你可以提供一个例子或一些伪代码来说明某些程序集(或那些沿着这些行的东西,而不是像C那样高的程度)可能看起来可以展示基本流程,那也是惊人的.

compiler-construction jit compilation llvm machine-code

4
推荐指数
1
解决办法
556
查看次数