首页
社区
课程
招聘
[旧帖] [提问]请问几个简单的16进制转换 0.00雪花
发表于: 2007-9-8 18:13 4849

[旧帖] [提问]请问几个简单的16进制转换 0.00雪花

2007-9-8 18:13
4849
你们好,请问几个问题:

1\

看了CCDebuger老大的OD教程,里面有几句是这样的:

004013E2 |. 3C 2D             CMP AL,2D                                   ; 把取得的字符与16进制值为2D的字符(即“-”)比较,这里主要用于判断输入的是不是负数

这个2D怎么换算成"负号"呢?

004013F0 |> 2C 30             SUB AL,30                                   ; 每位字符减16进制的30,因为这里都是数字,如1的ASCII码是“31H”,减30H后为1,即我们平时看到的数值

还有这个,31的ASCII码怎么是1,怎么算的呀?

还是31H赋值1了?

2\

004013D3 |. 33C0              XOR EAX,EAX                                 ; EAX清零

004013DB |. 33C9              XOR ECX,ECX                                 ; ECX清零
004013DD |. 33D2              XOR EDX,EDX                                 ; EDX清零

清零用处是什么呀?是不是XOR命令,都是清零?

3\一般跟入CALL,都会有例如:

004013D2 /$ 56                PUSH ESI                                    ; ESI入栈
00401404 |. 5E                POP ESI                                     ; ESI出栈。看到这条和下一条指令,我们要考虑一下这个ESI的值是哪里运算得出的呢?

是不是堆栈原理?能不能详细解释下呢?

4、
004013D2 /$ 56                PUSH ESI                                    ; ESI入栈
004013D3 |. 33C0              XOR EAX,EAX                                 ; EAX清零
004013D5 |. 8D35 C4334000     LEA ESI,DWORD PTR DS:[4033C4]               ; 把注册码框中的数值送到ESI
004013DB |. 33C9              XOR ECX,ECX                                 ; ECX清零
004013DD |. 33D2              XOR EDX,EDX                                 ; EDX清零
004013DF |. 8A06              MOV AL,BYTE PTR DS:[ESI]                    ; 把注册码中的每个字符送到AL
004013E1 |. 46                INC ESI                                     ; 指针加1,指向下一个字符

004013D5 |. 8D35 C4334000     LEA ESI,DWORD PTR DS:[4033C4]
这个怎么看出来是把注册码框中的数值送到ESI呢?

MOV AL,BYTE PTR DS:[ESI]
怎么看出MOV AL,BYTE PTR DS:[ESI] ,是不是单字节送如ESI的DS段呢?

谢谢!!谢谢你们,问了那么多问题,不好意思了

本人很菜,但不懒,麻烦你们了,谢谢!!


[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
看楼主很着急,很用功我这个菜鸟说一下吧。楼主现在需要迫切的放下学习ollydbg,赶紧找本汇编书仔细的看看。你现在提的问题都是最基本的汇编知识,如果你还在学ollydbg工具的话是没用的,因为你看不动基本代码,工具掌握的再好也没用的。学习汇编是你的当前第一要务!

1,2两个问题是一个问题。楼主需要明白ASICII字符编码。这个是基础啊。2D(16进制)=2×16+13=45(10进制)  asicii表示位 “-”,下面那个是一样的。30是0的16进制的asicii编码。

XOR EAX,EAX   是清0的意思。xor是一个异或逻辑操作码。运算为:
0+0=0
0+1=1
1+0=1
1+1=0
同位相同为0,相异为1
清0有很多写法,如
        1)      mov eax, 00000000h            
        2)      sub eax, eax                          
        3)      xor eax, eax              
1是最菜的写法,不推荐。因为速度最慢。需要消耗5个字节。后面2个都需要2个字节的空间。
需要说明的一条指令需要多少字节是CPU编码的,需要查询intel的指令编码格式。这个是熟悉了指令之后需要学习的。           

3,4的问题具体问题具体分析,不能一概而论。进入堆栈的话,要压esp,ebp指针的。如果想你说的esi指针在函数需要用,当然要先压一下保存esi指令作指内存原来存储的数据。
至于为什么存储的是注册码,这个具体分析一下就可以了。调试ollydbg的时候是要关注寄存器那一栏的。

MOV AL,BYTE PTR DS:[ESI] 这个你完全理解错了,这个的意思是DS段地址+ESI偏移之后的地址的内容取出8位就是一个字节送到al 寄存器内去。

注意一点,汇编指令源与目的操作数是要类型一致的,字节对字节,字对字,不能字节对字等。这个适用所有的指令。你看看目的操作数AL寄存器就知道一定是8位的了。

总之,看了你的提问,我建议现在别去看ollydbg了。你的汇编基本上=0,你现在需要学习汇编,最起码看程序没问题才行。现在直接玩ollydbg没用的。

基础,你现在要打基础。看学老大的新手入门要仔细看。别慌着玩破解。我也是一个菜鸟,说的不对的地方还请各位老大指点。
2007-9-8 21:06
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
梦中初醒啊,太谢谢"蓝色海洋"大哥了.

我知道了,我就去先去学习汇编

谢谢大哥的指点,很详细

其实自己也不想麻烦各位大大,只是有些东西,搜索都找不到...

再次感谢蓝色海洋
2007-9-9 16:13
0
游客
登录 | 注册 方可回帖
返回