首页
社区
课程
招聘
[原创]Tiny C Compiler补丁编译器
发表于: 2011-9-15 15:06 12231

[原创]Tiny C Compiler补丁编译器

2011-9-15 15:06
12231
如果需要加入头文件可以在OD插件目录下建Include目录把头文件放入内
在C代码里直接#include<>就可以了
C_Patch.rarTiny C Compiler补丁编译器OD1.1源码
Demo.rar演示视频
修复两处大Bug
添加一个获取主函数入口的功能
听取cntrump的意见,把获取的大小改为终止地址
抱歉各位重新下载下吧

水平有限补上源码让大牛们来吧

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (19)
雪    币: 1080
活跃值: (1283)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
关注一个   
2011-9-15 18:32
0
雪    币: 768
活跃值: (530)
能力值: ( LV13,RANK:460 )
在线值:
发帖
回帖
粉丝
3
关注:)上班后试试
2011-9-16 07:20
0
雪    币: 1708
活跃值: (586)
能力值: ( LV15,RANK:670 )
在线值:
发帖
回帖
粉丝
4
继续关注。。。
#include 目录可以设置就好了,已经装有开发环境了。还要再把文件多拷贝一份么。。
编译后的 C 代码是经过优化的吗??
2011-9-16 10:12
0
雪    币: 1708
活跃值: (586)
能力值: ( LV15,RANK:670 )
在线值:
发帖
回帖
粉丝
5
这个插件可以玩。

可以这样写:
#define NULL 0
#define HDC unsigned long

void test()
{
  HDC hdc = GetDC(NULL);
}


在OD的反汇编窗口里生成:
00A9E7E0 >  55              push ebp
00A9E7E1    89E5            mov ebp,esp
00A9E7E3    81EC 04000000   sub esp,4
00A9E7E9    90              nop
00A9E7EA    B8 00000000     mov eax,0
00A9E7EF    50              push eax
00A9E7F0    E8 4F800000     call <&user32.GetDC>
00A9E7F5    83C4 04         add esp,4
00A9E7F8    8985 FCFFFFFF   mov dword ptr ss:[ebp-4],eax
00A9E7FE    C9              leave
00A9E7FF    C3              retn



点 GetSize 按钮之后,希望还能显示 EndAddr: 这样才比较好判断空间是否足够。
现在我明白头文件的作用了,就是可以定义类型。
不支持直接引用 WinDef.h ,看来类型定义要自己写了。

附加一个处理过的 Windef.h
上传的附件:
2011-9-16 10:29
0
雪    币: 1708
活跃值: (586)
能力值: ( LV15,RANK:670 )
在线值:
发帖
回帖
粉丝
6
编译生成的代码还可以再优化:

#include <windef.h>

DWORD GetSize(int x, int y, int x2, int y2)
{
 return x+y+x2+y2;
}


00A9E7E0 >  55               push ebp
00A9E7E1    89E5             mov ebp,esp
00A9E7E3    81EC 00000000    sub esp,0
00A9E7E9    90               nop
00A9E7EA    8B45 08          mov eax,dword ptr ss:[ebp+8]
00A9E7ED    8B4D 0C          mov ecx,dword ptr ss:[ebp+C]
00A9E7F0    01C8             add eax,ecx
00A9E7F2    8B4D 10          mov ecx,dword ptr ss:[ebp+10]
00A9E7F5    01C8             add eax,ecx
00A9E7F7    8B4D 14          mov ecx,dword ptr ss:[ebp+14]
00A9E7FA    01C8             add eax,ecx
00A9E7FC    E9 00000000      jmp far.00A9E801
00A9E801    C9               leave
00A9E802    C3               retn
2011-9-16 11:23
0
雪    币: 370
活跃值: (15)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
7
什么时候兴趣转到TINY C C了,这个优点,主用于什么场合?
2011-9-16 14:22
0
雪    币: 1708
活跃值: (586)
能力值: ( LV15,RANK:670 )
在线值:
发帖
回帖
粉丝
8
下面这个函数编译不通过。

int StringToInt(char *pHex)
{
    int i, sum, t, index;
    index = 0;
    sum = 0;

    for (i = 0; pHex[i] != 0 && index < 8; i++)
    {
        if (pHex[i] >= '0' && pHex[i] <= '9')
        {
            t = pHex[i] - '0';
            sum *= 0x10;
            sum += t; 
        }
        
        if (pHex[i] >= 'a' && pHex[i] <= 'f')
        {
            t = pHex[i] - 'a' + 10;
            sum *= 0x10;
            sum += t;
        }
        
        if (pHex[i] >= 'A' && pHex[i] <= 'F')
        {
            t = pHex[i] - 'a' + 10;
            sum *= 0x10;
            sum += t;
        }	
        
        if (0 == sum)
            index = 0;
        else
            index += 1;
    }
    
    return sum;
}
2011-9-16 18:01
0
雪    币: 1708
活跃值: (586)
能力值: ( LV15,RANK:670 )
在线值:
发帖
回帖
粉丝
9
FunName 是干什么用的??
右边的函数列表,要是能直接复制函数名称就好了。
还有用 edit 写代码,真的很难写,能不能换另一个控件。
编译生成的代码还是冗余。
2011-9-18 10:52
0
雪    币: 1708
活跃值: (586)
能力值: ( LV15,RANK:670 )
在线值:
发帖
回帖
粉丝
10
界面改成这样感觉比较好。
上传的附件:
2011-9-18 12:28
0
雪    币: 4560
活跃值: (1002)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
11
FunName是填入一个你自己定义的函数名,编译后会给出函数起始地址
俺孤陋寡闻不知道有啥好的控件,麻烦推荐个
冗余问题俺也木办法毕竟水平有限Tiny C Compiler也是别人写的
另外俺感觉你的字符串转数字函数木有俺的简短晔纯属个人看法
DWORD StrToHex(const char	* str)
{
	DWORD	n = 0;
	char szNB[9] = {0};
	int iLen = strlen(str);
	if(str && iLen >=	1 && iLen <= 8 )
	{
		if (iLen < 8)
		{
			for (int i = 8-iLen; i; i--)
			{
				strcat(szNB,"0");
			}
			strcat(szNB,str);
		}
		else
		{
			strcpy(szNB,str);
		}
		for (int y = 28 , i = 0; y>=0; y -= 4 ,i++)
		{
			switch (szNB[i])
			{
			case '0':case '1':case '2':	case '3':case '4':case '5':case	'6':case '7':case '8':case '9':
				n |= (szNB[i] - '0')<< y;
				break;
			case 'A':case 'B':case 'C':case	'D':case 'E':case 'F':
				n |= (szNB[i] - '7')<< y;
				break;
			case 'a':case 'b':case 'c':case	'd':case 'e':case 'f':
				n |= (szNB[i] - 'W')<< y;
				break;
			}
		}
	}
	else
	{//这里应该用来处理除了0x开头的16进制字符串的情况。
		__asm int 3;
	}
	return n;
}

cntrump兄如果有意的话,我把源码给你怎么样,表嫌我的代码烂就成
2011-9-18 12:34
0
雪    币: 1708
活跃值: (586)
能力值: ( LV15,RANK:670 )
在线值:
发帖
回帖
粉丝
12
推荐使用 Scintilla 作为编辑控件。
2011-9-18 12:59
0
雪    币: 563
活跃值: (95)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
收下还开源支持
2011-9-18 16:34
0
雪    币: 1708
活跃值: (586)
能力值: ( LV15,RANK:670 )
在线值:
发帖
回帖
粉丝
14
显示模块名称和函数名称的时候,按名称顺序排序,找起来方便。
替换了编辑控件。
https://github.com/cntrump/C_Patch_OD_Plugin

上传的附件:
2011-9-18 18:12
0
雪    币: 4560
活跃值: (1002)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
15
多谢大家的热心,人多力量的嘛
不过貌似木有语法高亮哦
我来给补上个RAEdit.dll版带语法高亮的,不过木有右键菜单
C_Patch.rar
上传的附件:
2011-9-19 12:35
0
雪    币: 27
活跃值: (127)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
16
好物....
2011-9-19 12:43
0
雪    币: 1708
活跃值: (586)
能力值: ( LV15,RANK:670 )
在线值:
发帖
回帖
粉丝
17
[QUOTE=b23526;1001676]多谢大家的热心,人多力量的嘛
不过貌似木有语法高亮哦
我来给补上个RAEdit.dll版带语法高亮的,不过木有右键菜单
C_Patch.rar[/QUOTE]

语法高亮也可以做。。。
2011-9-19 13:33
0
雪    币: 80
活跃值: (87)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
求tcc教程啊~
2011-10-17 11:18
0
雪    币: 257
活跃值: (28)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
19
if (pHex[i] >= 'A' && pHex[i] <= 'F')
        {
            t = pHex[i] - 'a' + 10;
            sum *= 0x10;
            sum += t;
        }
2011-10-23 23:44
0
雪    币: 1708
活跃值: (586)
能力值: ( LV15,RANK:670 )
在线值:
发帖
回帖
粉丝
20
[QUOTE=goodlucky;1012616]if (pHex[i] >= 'A' && pHex[i] <= 'F')
        {
            t = pHex[i] - 'a' + 10;
            sum *= 0x10;
            sum += t;
        }...[/QUOTE]


2011-10-24 08:11
0
游客
登录 | 注册 方可回帖
返回
//