你们好,请问几个问题:
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日开班!