TC官方合作论坛

 找回密码
 立即注册
查看: 6301|回复: 17

【剑仙教程】tc内联汇编 (源码)。

  [复制链接]
发表于 2018-4-11 12:08:13 来自手机 | 显示全部楼层 |阅读模式

马上加入TC

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 剑仙十号 于 2019-12-2 12:08 编辑

tc内联汇编(源码)。

游客,如果您要查看本帖隐藏内容请回复


变量 线程ID
功能 执行()
  var ret = 位运算_初始化() //使用前必须初始化一次。
  ret = 位与(16, 16)
  messagebox(ret)
结束
功能 启动_热键()
var bool = 线程获取状态(线程ID)
if(bool == 0)
线程ID = 线程开启("执行", "")
end
结束
功能 终止_热键()
  线程关闭(线程ID)
结束
//--------------------汇编构造位运算库-------------------
var __位运算_AsmCode = array("初始化" = false, "位或" = 0, "位与" = 0, "位反" = 0, "位异或" = 0, "位左移" = 0, "位右移" = 0)
//
function 位运算_初始化() //使用前,必须先调用一次。

if(__位运算_AsmCode["初始化"] == false)
  var pAsmCode, AsmCode = array()
  AsmCode["0"] = array("short" = 1, "value" = #8B55)
//查看 tc帮助文档,dllcall,结构体的使用。
//90 55 8B //EC 8B 45 08 0B 45 0C 0B 45 10 0B 45 14 C9 C2 10 00
//short类型,占位2字节。左边是高字节,右边是低字节。所以EC 8B位置要对调。 45 08位置要对调。其它的同理。
  AsmCode["1"] = array("short" = 1, "value" = #8BEC)
  AsmCode["2"] = array("short" = 1, "value" = #0845)
  AsmCode["3"] = array("short" = 1, "value" = #450B)
  AsmCode["4"] = array("short" = 1, "value" = #0B0C)
  AsmCode["5"] = array("short" = 1, "value" = #1045)
  AsmCode["6"] = array("short" = 1, "value" = #450B)
  AsmCode["7"] = array("short" = 1, "value" = #C914)
  AsmCode["8"] = array("short" = 1, "value" = #10C2)
  AsmCode["9"] = array("short" = 1, "value" = #9000)
  AsmCode["10"] = array("short" = 1, "value" = #8B55)
  AsmCode["11"] = array("short" = 1, "value" = #8BEC)
  AsmCode["12"] = array("short" = 1, "value" = #0845)
  AsmCode["13"] = array("short" = 1, "value" = #4523)
  AsmCode["14"] = array("short" = 1, "value" = #C90C)
  AsmCode["15"] = array("short" = 1, "value" = #10C2)
  AsmCode["16"] = array("short" = 1, "value" = #9000)
  AsmCode["17"] = array("short" = 1, "value" = #8B55)
  AsmCode["18"] = array("short" = 1, "value" = #8BEC)
  AsmCode["19"] = array("short" = 1, "value" = #0845)
  AsmCode["20"] = array("short" = 1, "value" = #D0F7)
  AsmCode["21"] = array("short" = 1, "value" = #C2C9)
  AsmCode["22"] = array("short" = 1, "value" = #0010)
  AsmCode["23"] = array("short" = 1, "value" = #5590)
  AsmCode["24"] = array("short" = 1, "value" = #EC8B)
  AsmCode["25"] = array("short" = 1, "value" = #458B)
  AsmCode["26"] = array("short" = 1, "value" = #3308)
  AsmCode["27"] = array("short" = 1, "value" = #0C45)
  AsmCode["28"] = array("short" = 1, "value" = #4533)
  AsmCode["29"] = array("short" = 1, "value" = #3310)
  AsmCode["30"] = array("short" = 1, "value" = #1445)
  AsmCode["31"] = array("short" = 1, "value" = #C2C9)
  AsmCode["32"] = array("short" = 1, "value" = #0010)
  AsmCode["33"] = array("short" = 1, "value" = #5590)
  AsmCode["34"] = array("short" = 1, "value" = #EC8B)
  AsmCode["35"] = array("short" = 1, "value" = #458B)
  AsmCode["36"] = array("short" = 1, "value" = #8A08)
  AsmCode["37"] = array("short" = 1, "value" = #0C4D)
  AsmCode["38"] = array("short" = 1, "value" = #E0D3)
  AsmCode["39"] = array("short" = 1, "value" = #C2C9)
  AsmCode["40"] = array("short" = 1, "value" = #0010)
  AsmCode["41"] = array("short" = 1, "value" = #5590)
  AsmCode["42"] = array("short" = 1, "value" = #EC8B)
  AsmCode["43"] = array("short" = 1, "value" = #458B)
  AsmCode["44"] = array("short" = 1, "value" = #8A08)
  AsmCode["45"] = array("short" = 1, "value" = #0C4D)
  AsmCode["46"] = array("short" = 1, "value" = #E8D3)
  AsmCode["47"] = array("short" = 1, "value" = #C2C9)
  AsmCode["48"] = array("short" = 1, "value" = #0010)
  pAsmCode = structmalloc(AsmCode)
  if(dllcall("Kernel32.dll", "long", "VirtualProtect", "long", pAsmCode, "long", structlen(AsmCode), "long", #40, "plong", null))
  __位运算_AsmCode["位或"] = pAsmCode
  __位运算_AsmCode["位与"] = pAsmCode + 19
  __位运算_AsmCode["位反"] = pAsmCode + 33
  __位运算_AsmCode["位异或"] = pAsmCode + 46
  __位运算_AsmCode["位左移"] = pAsmCode + 66
  __位运算_AsmCode["位右移"] = pAsmCode + 82
  __位运算_AsmCode["初始化"] = true
  end
end
return __位运算_AsmCode["初始化"]
end
//
function 位或(参_整数1, 参_整数2, 参_整数3 = 0, 参_整数4 = 0)
return __CallWindowProc(__位运算_AsmCode["位或"], 参_整数1, 参_整数2, 参_整数3, 参_整数4)
end
function 位与(参_整数1, 参_整数2)
return __CallWindowProc(__位运算_AsmCode["位与"], 参_整数1, 参_整数2, null, null)
end
function 位反(参_整数)
return __CallWindowProc(__位运算_AsmCode["位反"], 参_整数, null, null, null)
end
function 位异或(参_整数1, 参_整数2, 参_整数3 = 0, 参_整数4 = 0)
return __CallWindowProc(__位运算_AsmCode["位异或"], 参_整数1, 参_整数2, 参_整数3, 参_整数4)
end
function 位左移(参_整数, 参_位数 = 0)
return __CallWindowProc(__位运算_AsmCode["位左移"], 参_整数, 参_位数, null, null)
end
function 位右移(参_整数, 参_位数 = 0)
return __CallWindowProc(__位运算_AsmCode["位右移"], 参_整数, 参_位数, null, null)
end
function __CallWindowProc(参_地址, 参_参数1, 参_参数2, 参_参数3, 参_参数4)
return dllcall("User32.dll", "long", "CallWindowProcW", "long", 参_地址, "long", 参_参数1, "long", 参_参数2, "long", 参_参数3, "long", 参_参数4)
end



//--------------------位或--------------------
//nop
//push ebp
//mov ebp , esp
//mov eax,dword [ebp+08h]
//or eax,dword [ebp+0Ch]
//or eax,dword [ebp+10h]
//or eax,dword [ebp+14h]
//leave
//retn 0010h
//使用汇编代码转换机器码工具,把位或汇编代码,换成十六进制机器码。
//排列顺序,从低字节到高字节。(左边是低字节,右边是高字节)
//90 55 8B EC 8B 45 08 0B 45 0C 0B 45 10 0B 45 14 C9 C2 10 00
//--------------------位与--------------------
//nop
//push ebp
//mov ebp,esp
//mov eax,[ebp+08h] 参数1是窗口句柄,不需要参加计算,不进栈。
//and eax,[ebp+0Ch]
//leave
//retn 0010h
//90 55 8B EC 8B 45 08 23 45 0C C9 C2 10 00
//--------------------位反--------------------
//nop
//push ebp
//mov ebp , esp
//mov eax,dword [ebp+08h]
//not eax
//leave
//retn 0010h
//90 55 8B EC 8B 45 08 F7 D0 C9 C2 10 00
//--------------------位异或--------------------
//nop
//push ebp
//mov ebp , esp
//mov eax,dword [ebp+08h]
//xor eax,dword [ebp+0Ch]
//xor eax,dword [ebp+10h]
//xor eax,dword [ebp+14h]
//leave
//retn 0010h
//90 55 8B EC 8B 45 08 33 45 0C 33 45 10 33 45 14 C9 C2 10 00
//--------------------位左移--------------------
//nop
//push ebp
//mov ebp , esp
//mov eax,dword [ebp+08h]
//mov cl,byte [ebp+0Ch]
//shl eax,cl
//leave
//retn 0010h
//90 55 8B EC 8B 45 08 8A 4D 0C D3 E0 C9 C2 10 00
//--------------------位右移--------------------
//nop
//push ebp
//mov ebp , esp
//mov eax,dword [ebp+08h]
//mov cl,byte [ebp+0Ch]
//shr eax,cl
//leave
//retn 0010h
//90 55 8B EC 8B 45 08 8A 4D 0C D3 E8 C9 C2 10 00

//注释:单个汇编函数,情况完全正常。
//多个汇编函数,会莫名的出错。后来楼主发现,前一段汇编代码,与后一段汇编代码的标志位分不清。系统将它们拼接在一起了。
//楼主在每段汇编代码前,加入nop作为分割符,问题得到解决。
回复

使用道具 举报

 楼主| 发表于 2018-4-11 12:08:36 来自手机 | 显示全部楼层
本帖最后由 剑仙十号 于 2020-4-12 22:22 编辑

二楼,更新信息专用。
tc简单开发_兴趣群:
143358382 (497/500)

tc简单开发_爱好群:
433286131 (498/500)

tc简单开发_高级:
891069033 (99/500)

编程四大F:
1、流程控制,2、变量和数组,
3、函数多线程,4、系统api。
本群大神众多,新手众多,群文件内_资源海量。希望新手分享 更多的学习笔记,减少重复造轮子的时间。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-11 12:17:13 | 显示全部楼层
本帖最后由 剑仙十号 于 2018-4-11 12:28 编辑

结构体_变量类型。字节的高低。

左边是最高字节,右边最低字节。
中间分别是 中高字节,中低字节。
如“short”类型,占位2字节。左边是高字节,右边是低字节。
如 “long”类型,占位4字节。左边是高字节,右边是低字节。中间分别是 中高字节,中低字节。

二进制,位的高低。
左边是最高位,右边最低位。
中间分别是 中高位,中低位。

=======================================================
汇编代码转换机器码工具v5.1.5

汇编代码转换机器码工具 v5.1.5 官方免费绿色版
大小: 1.4MB适用平台: Win8 / Win7 / Vista / WinXP

应用介绍
免费好用的汇编代码转换器,可以实现汇编代码转换机器码,和机器码转汇编代码

该软件作者在实践过程中,经常使用该工具,查询某个机器码的汇编代码是什么,或者某汇编代码对应的机器码是什么

主要功能:
1.自动检测错误代码
2.支持定义参数跟变量
3.支持伪指令跟SSE指令
4.支持反汇编器支持标号
5.支持中文汇编指令转换
6.支持反汇编API名称还原
7.支持汇编代码的高亮跟自动完成
8.可以直接汇编带有API函数的语句
位。左边是最高位,右边最低位.png

汇编代码转换机器码工具 v5.1.5.zip

2.57 MB, 下载次数: 80, 下载积分: 金币 -1 个

回复 支持 反对

使用道具 举报

发表于 2018-7-26 22:40:44 | 显示全部楼层
向你学习!!! 谢谢
回复 支持 反对

使用道具 举报

发表于 2018-11-6 20:51:14 | 显示全部楼层
69195
回复

使用道具 举报

发表于 2018-11-23 20:01:50 | 显示全部楼层
tc内联汇编 (源码)
回复 支持 反对

使用道具 举报

发表于 2019-2-24 02:37:36 | 显示全部楼层
好高深,努力学习
回复 支持 反对

使用道具 举报

发表于 2020-6-28 01:33:09 | 显示全部楼层
6666666666666666666666
回复 支持 反对

使用道具 举报

发表于 2020-8-26 20:29:40 | 显示全部楼层
看看
回复

使用道具 举报

发表于 2020-9-25 22:16:32 | 显示全部楼层
内联汇编.内联汇编.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条

关闭

小黑屋|TC官方合作论坛 (苏ICP备18045623号)

GMT+8, 2024-5-10 05:02 , Processed in 0.050098 second(s), 25 queries .

Powered by 海安简单软件服务部

© 2008-2019 版权所有 保留所有权利

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