绝恋de烦神 发表于 2018-6-2 12:54:35

带返回值的汇编代码如何应用到自己写的工具中?置入代码?内联汇编?

本帖最后由 绝恋de烦神 于 2018-6-2 16:42 编辑

在OD中跟进一个CALL中,CALL里的代码很小,只有几行,怎样才能把这几行代码应用到自己的工具上呢?

77C2E96A    55                  PUSH EBP
77C2E96B    8BEC            MOV EBP,ESP
77C2E96D    8B45 08         MOV EAX,DWORD PTR SS: <--这个DWORD PTR SS:存放得就是传进来的参数
77C2E970    99                  CDQ
77C2E971    33C2            XOR EAX,EDX
77C2E973    2BC2            SUB EAX,EDX
77C2E975    5D                  POP EBP
77C2E976    C3                  RETN
其实这小段代码就是一个简单计算,但我弄不明白CDQ这个在编程的时候要怎样表达,我百度了一下,说:这个指令大多出现在除法运算之前. 它实际的作用只是把EDX的所有位都设成EAX最高位的值. 也就是说,当EAX <80000000, EDX 00000000; 当EAX >= 80000000, EDX 则为FFFFFFFF).

我想这个说法是对了,这里返回出去后是要进行一个除法运算的。

那么,在编程里怎样表达这一步呢?

-----------------------------------------------------
原来不用内联汇编了,取符号判断一下,再运算就可以了。谢谢飘云大大和wgz001大大的解答。

飘云 发表于 2018-6-2 12:57:52

C

这都到系统API领空了吧。直接调用这个函数不行?

CDQ就是个扩展指令~

绝恋de烦神 发表于 2018-6-2 13:03:46

飘云 发表于 2018-6-2 12:57
这都到系统API领空了吧。直接调用这个函数不行?

CDQ就是个扩展指令~

我想写的是注册机,想着这代码不是很复杂,看能不能直接编写出来,就不用去调用这个DLL啦

飘云 发表于 2018-6-2 13:05:06

那就内嵌ASM咯~

绝恋de烦神 发表于 2018-6-2 13:55:44

飘云 发表于 2018-6-2 13:05
那就内嵌ASM咯~

.版本 2

.子程序 check, 整数型
.参数 Num, 整数型

置入代码 ({ 80 })' PUSH EAX
置入代码 ({ 139, 69, 252 })' MOV EAX,DWORD PTR SS:
置入代码 ({ 153 })' CDQ
置入代码 ({ 51, 194 })' XOR EAX,EDX
置入代码 ({ 43, 194 })' SUB EAX,EDX
置入代码 ({ 137, 69, 248 })' MOV DWORD PTR SS:,EAX
置入代码 ({ 88 })' POP EAX
在易语言写了一个子程序来计算传进来的值,运行的时候,易语言提示这里是有返回值的,请问下我把算出来的结果传到这里了,怎样才能把这里的值返回出去呢?

飘云 发表于 2018-6-2 14:01:23

不懂易语言~

wgz001 发表于 2018-6-2 14:03:52

看上面说的应该就是符号位扩展,自己可以判断一下,然后实现,还有就是这里应该不是程序领空

defm 发表于 2018-6-2 14:58:28

我记得易语言的返回值就是保存在AX里的
页: [1]
查看完整版本: 带返回值的汇编代码如何应用到自己写的工具中?置入代码?内联汇编?