能力值:
(RANK:410 )
|
-
-
2 楼
不知道,现在我只能用假设的方法回答你的问题。现在假设aaaa保存着bbbb地址。bbbb地址保存着字符串"abcdef"。那么。
mov edx,aaaa ; 将bbbb的地址传给edx
...........
xor esi,esi ; esi清零
xor eax,eax ; eax清零
mov cl,byte ptr [esi+edx] ; 将bbbb保存着的字符串"abcdef"中的"a"取出放到cl中。
|
能力值:
( LV4,RANK:50 )
|
-
-
3 楼
小虾的回答真精彩
楼主要是能把程序的初始寄存器值也列出来或许能更好的解答。
|
能力值:
( LV9,RANK:250 )
|
-
-
4 楼
这样的一小段代码真的很难回答的
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
谢了
|
能力值:
( LV9,RANK:210 )
|
-
-
6 楼
haha
他可能问的是esi已经清0了,[esi+edx]中的esi还有什么意思!
……
xor esi, esi
……
mov cl,byte ptr [esi+edx] ……
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
下面还有代码 是个循环
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
lea edx, dword ptr [406349] ; 装入edx的是地址还是实际的用户名
push edx ;
call <jmp.&kernel32.lstrlenA> ;
[406349]是输入用户名的地址 下面的lsrtlenA是计算用户名的长度
例如我的用户名为:aaaa 那么push edx后 edx就成aaaa了 但是调用完lsrtlenA以后edx就成aaa了 少了一个a 不知道是为什么
|
能力值:
(RANK:10 )
|
-
-
9 楼
问点基础 忘了
比如EDX=0x12345678
byte ptr [edx]=8?
WORD ptr [edx]=78?
|
能力值:
(RANK:410 )
|
-
-
10 楼
最初由 muwanqing 发布 lea edx, dword ptr [406349] ; 装入edx的是地址还是实际的用户名 push edx ; call <jmp.&kernel32.lstrlenA> ;
[406349]是输入用户名的地址 下面的lsrtlenA是计算用户名的长度 ........
edx的值被lstrlen函数改变了。API函数是不会保存eax/edx和ecx的值的,如果你有重要的数据不想被改变,在调用API函数时请将数据push保存起来,或者暂时传到esi/edi或ebx寄存器中。API函数不会改变这三个寄存器的值。
|
能力值:
(RANK:410 )
|
-
-
11 楼
最初由 zhenkyss 发布 问点基础 忘了
比如EDX=0x12345678
........
mov [edx],0x12345678
mov al,byte ptr [edx] ; al == 78
mov bx,word ptr [edx] ; bx == 7856
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
谢谢虾哥 新年快乐
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
新年快乐,我也学了一招
|
能力值:
( LV12,RANK:210 )
|
-
-
14 楼
准确的说, 除了esi, edi和ebx外 api会保存的寄存器还有ebp
对于你的代码, 一般来说,
都是
mov esi, xxx
xor eax, eax
mov cl byte ptr [esi+eax]
用esi指向一个缓冲区的源, eax做索引index用.
一般是对一个buffer进行运算, 比如加密, hash什么的
但不知你什么编译器. 把eax和esi反过来用了一下.
|
|
|