完整指令在x64 asm代码中需要的最大字节数是多少?
像跳转到地址这样的东西可能占用多达9个字节我想:FF 00 00 00 00 11 12 3F 1F但我不知道这是否是x64指令可以使用的最大字节数
我正在查看汇编中的不同指令,我对如何决定不同操作数和操作码的长度感到困惑.
这是你应该从经验中得知的东西,还是有办法找出哪个操作数/运算符组合占用了多少字节?
例如:
push %ebp ; takes up one byte
mov %esp, %ebp ; takes up two bytes
Run Code Online (Sandbox Code Playgroud)
所以问题是:
在看到给定的指令后,如何推断出其操作码需要多少字节?
最近我开始学习x86汇编语言和CPU架构.我注意到int寄存器的总数是8,但对于x86-64,它是16.
为什么?必须有一些解释.
有没有办法以编程方式从x86架构上的二进制可执行文件中读取给定数量的指令?
如果我有一个简单的C程序的二进制文件hello.c:
#include <stdio.h>
int main(){
printf("Hello world\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在使用编译后gcc,反汇编函数main如下所示:
000000000000063a <main>:
63a: 55 push %rbp
63b: 48 89 e5 mov %rsp,%rbp
63e: 48 8d 3d 9f 00 00 00 lea 0x9f(%rip),%rdi # 6e4 <_IO_stdin_used+0x4>
645: e8 c6 fe ff ff callq 510 <puts@plt>
64a: b8 00 00 00 00 mov $0x0,%eax
64f: 5d pop %rbp
650: c3 retq
651: 66 2e 0f 1f 84 00 00 nopw %cs:0x0(%rax,%rax,1)
658: 00 00 …Run Code Online (Sandbox Code Playgroud) 我正在尝试学习X86汇编(用于学习逆向工程).我学习了C#和C\C++语言以及IL
可能我的主要问题是英语,因为我是波斯语,而且我也找不到任何有用的文件来学习用波斯语写的X86程序集.所以我决定做我为学习C#和C++所做的事情.我试过阅读X86样本和你好世界,但我失败了因为我无法理解我必须选择哪个注册表以及其他只能通过查看源代码无法解决的问题.
所以我决定改变策略并做一个挑战:写一个X86反汇编程序 我很生气,我知道.但我们不能说这是不可能的.第一个认为我需要理解(但没有记住)的是这些表:http://ref.x86asm.net/coder32.html
我对操作码很好,但我不明白如何计算操作数的大小或者寄存器十六进制字节呢?
对不起,我的英语不好.
PS.我想用C#做它
assembly ×5
x86 ×3
c ×2
x86-64 ×2
64-bit ×1
binaryfiles ×1
c# ×1
code-size ×1
cpu ×1
instructions ×1
machine-code ×1