飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 3467|回复: 7

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

[复制链接]
  • TA的每日心情
    开心
    2020-8-30 18:31
  • 签到天数: 52 天

    [LV.5]常住居民I

    发表于 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:[EBP+8] <--这个DWORD PTR SS:[EBP+8]存放得就是传进来的参数
    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大大的解答。
    PYG19周年生日快乐!
  • TA的每日心情
    难过
    3 天前
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    发表于 2018-6-2 12:57:52 | 显示全部楼层

    C

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

    CDQ就是个扩展指令~

    点评

    我想写的是注册机,想着这代码不是很复杂,看能不能直接编写出来,就不用去调用这个DLL啦  详情 回复 发表于 2018-6-2 13:03
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-8-30 18:31
  • 签到天数: 52 天

    [LV.5]常住居民I

     楼主| 发表于 2018-6-2 13:03:46 | 显示全部楼层
    飘云 发表于 2018-6-2 12:57
    这都到系统API领空了吧。直接调用这个函数不行?

    CDQ就是个扩展指令~

    我想写的是注册机,想着这代码不是很复杂,看能不能直接编写出来,就不用去调用这个DLL啦
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    3 天前
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    发表于 2018-6-2 13:05:06 | 显示全部楼层
    那就内嵌ASM咯~

    点评

    在易语言写了一个子程序来计算传进来的值,运行的时候,易语言提示这里是有返回值的,请问下我把算出来的结果传到[EBP-8]这里了,怎样才能把这里的值返回出去呢?  详情 回复 发表于 2018-6-2 13:55
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-8-30 18:31
  • 签到天数: 52 天

    [LV.5]常住居民I

     楼主| 发表于 2018-6-2 13:55:44 | 显示全部楼层
    .版本 2

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

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

    使用道具 举报

  • TA的每日心情
    难过
    3 天前
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    发表于 2018-6-2 14:01:23 | 显示全部楼层
    不懂易语言~
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-2-26 11:14
  • 签到天数: 459 天

    [LV.9]以坛为家II

    发表于 2018-6-2 14:03:52 | 显示全部楼层
    看上面说的应该就是符号位扩展,自己可以判断一下,然后实现,还有就是这里应该不是程序领空
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2024-2-29 09:55
  • 签到天数: 321 天

    [LV.8]以坛为家I

    发表于 2018-6-2 14:58:28 | 显示全部楼层
    我记得易语言的返回值就是保存在AX里的
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表