首页
社区
课程
招聘
[旧帖] [求助]汇编代码问题 0.00雪花
发表于: 2007-2-17 02:33 4261

[旧帖] [求助]汇编代码问题 0.00雪花

2007-2-17 02:33
4261
mov     edx, aaaa
...............
xor     esi, esi
xor     eax, eax
mov     cl, byte ptr [esi+edx] ;这个不理解

[esi+edx]指向的是什么

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (13)
雪    币: 2384
活跃值: (766)
能力值: (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中。
2007-2-17 08:58
0
雪    币: 250
活跃值: (30)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
小虾的回答真精彩
楼主要是能把程序的初始寄存器值也列出来或许能更好的解答。
2007-2-17 10:50
0
雪    币: 263
活跃值: (10)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
4
这样的一小段代码真的很难回答的
2007-2-17 11:42
0
雪    币: 190
活跃值: (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
谢了
2007-2-17 12:40
0
雪    币: 263
活跃值: (10)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
6
haha
他可能问的是esi已经清0了,[esi+edx]中的esi还有什么意思!

……
xor     esi, esi
……
mov cl,byte ptr [esi+edx]

……
2007-2-17 12:50
0
雪    币: 190
活跃值: (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
下面还有代码  是个循环
2007-2-17 12:55
0
雪    币: 190
活跃值: (70)
能力值: ( 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 不知道是为什么

2007-2-17 13:02
0
雪    币: 200
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
9
问点基础 忘了

比如EDX=0x12345678

byte ptr [edx]=8?
WORD ptr [edx]=78?
2007-2-17 14:10
0
雪    币: 2384
活跃值: (766)
能力值: (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函数不会改变这三个寄存器的值。
2007-2-17 14:17
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
11
最初由 zhenkyss 发布
问点基础 忘了


比如EDX=0x12345678

........


mov [edx],0x12345678
mov al,byte ptr [edx] ; al == 78
mov bx,word ptr [edx] ; bx == 7856
2007-2-17 14:19
0
雪    币: 190
活跃值: (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
谢谢虾哥 新年快乐
2007-2-17 16:50
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
新年快乐,我也学了一招
2007-2-17 23:39
0
雪    币: 101
活跃值: (12)
能力值: ( 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反过来用了一下.
2007-2-18 10:54
0
游客
登录 | 注册 方可回帖
返回
//