带返回值的汇编代码如何应用到自己写的工具中?置入代码?内联汇编?
本帖最后由 绝恋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大大的解答。
C
这都到系统API领空了吧。直接调用这个函数不行?CDQ就是个扩展指令~
飘云 发表于 2018-6-2 12:57
这都到系统API领空了吧。直接调用这个函数不行?
CDQ就是个扩展指令~
我想写的是注册机,想着这代码不是很复杂,看能不能直接编写出来,就不用去调用这个DLL啦
那就内嵌ASM咯~ 飘云 发表于 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
在易语言写了一个子程序来计算传进来的值,运行的时候,易语言提示这里是有返回值的,请问下我把算出来的结果传到这里了,怎样才能把这里的值返回出去呢?
不懂易语言~ 看上面说的应该就是符号位扩展,自己可以判断一下,然后实现,还有就是这里应该不是程序领空 我记得易语言的返回值就是保存在AX里的
页:
[1]