汇编与JIT编程
Posted qccz123456
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇编与JIT编程相关的知识,希望对你有一定的参考价值。
读懂汇编
1 什么是汇编?
??计算机能运行的是二进制的指令,如00000011
,为了解决可读性和方便编辑的问题,就诞生了汇编语言,所以汇编语言是二进制指令的文本形式,与二进制指令一一对应,如00000011
代表ADD
,二进制与汇编语言都是最底层的低级语言。
由CPU指令和指令对应的运算子构成一条汇编语句,如:
mov %ebx, [%esp+12]
add %eax, %ebx
?? 汇编 assembling 的过程,是由汇编器将汇编语言 assembly language (asm) 编译成二进制。
2 汇编程序的运行过程
int add_a_and_b(int a, int b) {
return a + b;
}
int main() {
return add_a_and_b(2, 3);
}
通过 gcc -S example.c
将C程序得到简化的汇编程序:
_add_a_and_b:
push %ebx
mov %eax, [%esp+8]
mov %ebx, [%esp+12]
add %eax, %ebx
pop %ebx
ret
_main:
push 3
push 2
call _add_a_and_b
add %esp, 8
ret
Stack 与 帧 的概念
mov 指令:
push 指令:
add 指令:
pop 指令:
ret 指令:
即时编译 JIT code 的编写
以 AVX512 为例
reference:http://www.ruanyifeng.com/blog/2018/01/assembly-language-primer.html
以上是关于汇编与JIT编程的主要内容,如果未能解决你的问题,请参考以下文章
是否可以完全用托管的 .NET 语言编写 JIT 编译器(本地代码)
Android 逆向使用 Python 解析 ELF 文件 ( Capstone 反汇编 ELF 文件中的机器码数据 | 创建反汇编解析器实例对象 | 设置汇编解析器显示细节 )(代码片段