use*_*588 0 assembly x86-64 cpu-registers offset addressing-mode
沉迷于汇编程序的学习
mov byte ptr [rax+rdx-01],00
RAX=00000004
RDX=2295EA3B878
Run Code Online (Sandbox Code Playgroud)
和
mov [r10+rsi],al
RAX=0000000000000065
RSI=000002295EA3B878
R10=0000000000000000
Run Code Online (Sandbox Code Playgroud)
很清楚mov al byte ptr。但我不明白什么意思 [rax+rdx-01]和[r10+rsi] rax 和 r10 不是指针。
在大多数情况下,我面临[RAX+C1]rax 是指针而 C1 是偏移量的情况,但是我不知道寄存器存储某些值而不是指针时的含义
You might like to read about x86 addressing modes.
[rax+rdx-01]是指通过将计算出的地址rax和rdx并减去1。这是常用的,如果一个rax, rdx是一个指针阵列(“基地地址”),而另一个是一个索引到该阵列。所以这可能是由 C 代码生成的,例如
char *array = ...;
size_t i = ...;
// ...
array[i-1] = 0;
Run Code Online (Sandbox Code Playgroud)
其中 的值array存储在rax和i中rdx,反之亦然。你在这里说这rax不是一个指针,但也许rdx是。
同样,mov [r10+rsi], al可以对应
char *array = ...;
size_t i = ...;
char c = ...;
// ...
array[i] = c;
Run Code Online (Sandbox Code Playgroud)
其中r10=array和rsi=i(或反之亦然)和al=c。
| 归档时间: |
|
| 查看次数: |
594 次 |
| 最近记录: |