汇编edi
❶ mov edi,dword ptr ds:[esi+0x60] 在汇编语言中这是什么意思
di,16位寄存器,edi,32位寄存器其实后面的dword可以去掉,因为edi表明了要在 ds:[esi+0x60] 这个地回址,取双字节的内容答假设ds:[esi+0x60] 指向内存2000:0000,在这起始地址接下来连续四个字节的内容为 78 56 34 21那么执行mov edi,dword ptr ds:[esi+0x60] 后,edi的值为12345678
❷ 寄存器 rdi与edi什么关系
DI、EDI、RDI都是目的变址寄存器,DI用于16位汇编、EDI用于32位汇编、RDI用于64位汇编中,并且RDI向前兼容EDI、DI,EDI向前兼容DI。与之对应的还有SI、ESI、RDI都是源变址寄存器,区别与DI、EDI、RDI类似。
❸ movdqa [edi],xmm0 是什么意思
这是支持SSE指令集的汇编语句。
006F51EA 当然是指令的运行地址
movdaq是转移指令,内类似普通汇编容asm中的move指令,不同的是,movdaq是move aligned double quadword的意思,即:移动对齐的双4word (2x64位=128位)字节的数。 说白了就是128位的按位对齐的数据的转移指令。
xmm0是SSE的128位寄存器, 【edi】是edi寄存器里的内容所指向的内存地址。
上面的意思就是, 一条在006F51EA地址的运行指令,把xmm寄存器里的128位的数值,按位对齐赋值给edi寄存器的内容所执行的内存地址。
❹ 汇编中eax,ecx,edx,ebx,esp,ebp,esi,edi,eip分别是什么有什么用
这些是32位的CPU中32位的寄存器的名字。
寄存器是CPU内部的用于运行中专暂存数据的存储单属元。
在PC用的16位CPU 8086、8088中,寄存器的名字分别是AX(累加器),BX(基址寄存器),CX(计数寄存器),DX(数据寄存器),SP(堆栈指针),BP(基址指针),SI(源变址寄存器),DI(目的变址寄存器),IP(指令指针),等等……
这些寄存器除了从名字可以看得出来的用途以外,一部分寄存器也可以作为通用的一般数据寄存使用。具体每个寄存器的功能要与各种具体的指令关联起来才能理解清楚。
在386以上的32位CPU中,这些寄存器扩展成了32位的,名字就是在原来16位的名字前面加一个字母E,变成了EAX,EBX,…………
❺ 汇编语言 mov al,a[edi] a是变量 a[edi]是什么意思
将内存中数据段的偏移地址为a+edi的存储单元中存储的数据传送到AL寄存器,a[edi]采用的是相对变址寻址方式。edi是cpu内部的一个32位寄存器。
❻ 汇编语言 esi,edi寄存器问题
都属于通用寄存器,所以一般场景下都可以随便用。就是有些传送指令规定了esi是源,edi是目的
❼ 汇编语言mov [ebx+18],edi什么意思大侠解释下。。
1。将ebx的值拿出来加上18,结果记为X
2。将edi的值复制给内存地址为X的空间
比如ebx = 2, ebx+18 = 20(这里姑且理解18为十进制), edi = 6
假设内存数据全是0,
内存地址 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
内存数据 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
因为edi是32位寄存器,所以edi=0x00000006,而Intel或AMD的CPU都是little endian的,little endian理解起来就是把32位按8位分组,再颠倒,比如0x12345678在内存里就是78 56 34 12,所以存入内存地址20的空间就是(占用20 21 22 23,因为一个字节8位):
内存地址 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 |20 21 22 23| 24 25
内存数据 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |06 00 00 00| 00 00
mov [ebx+18],edi在反汇编里一般就是将一个对象的成员值改为edi
相当于c++里的:
obj->shift18 = edi;
或者c里的:
arr[shift18] = edi;
❽ 汇编语言里 exp eax ebp edi ecx 这些都是什么意思啊
eax ebp edi ecx都是寄存器的名称;
而且是32位的寄存器.如果用C语言来解释,可以把这些寄存器当作专变量看待属.
add eax,-2 ;可以认为是给变量eax加上-2这样的一个值.
建议了解一点汇编知识.
❾ 汇编中的:mov [edi+01],al 是什么意思,请大家帮我看下我分析的对不对
方括号“[]”内的表达式是一个内存地址;逗号的前半段是目的操作数,后半段是源操作数;mov指令是数据传送指令,也就是把AL的值传送至偏移地址EDI + 01h指向的内存单元中。
假设EDI = 10(十六进制数0ah),位移量1h,则偏移地址EDI + 1h = 0bh。又假设AL = 0ffh,则
| ……| AH AL
DS:[0bh] --> | ffh | <--------------------------------------- | …… | ffh |
| ……| AX
| ……|
另外,debug无法查看EDI的值,你需要使用32位的调试程序。
❿ OD工具如何查找特定的汇编指令如:MOV edi,edi 这样的
所有来指令序列查找范围是自当前CPU窗口所在的内存段。
Ctrl+G,然后输入401000,回车,然后你再找
你先得跳到你要找的代码所在的内存段,EXE是从401000开始的,如果是DLL的话,得按Alt+E,查看模块的基址,然后跳到基址之后再查找