gaclib.net
C++博客
首页
新随笔
联系
聚合
管理
随笔-341 评论-2670 文章-0 trackbacks-0
JIT脚本引擎:成员对齐详解
摘要: 为了让编译成x86后的代码可以转换成C++的函数指针,我们也必须处理成员对齐的事情。如果脚本里的结构成员对齐跟C++不一致的话,会造成很多麻烦。下面是成员对齐的计算方法:
阅读全文
posted @
2009-03-09 20:46
陈梓瀚(vczh) 阅读(3736) |
评论 (2)
|
编辑
收藏
JIT脚本引擎:浮点运算
摘要: x87的FPU支持很多种浮点运算,其中浮点运算的比较结果不放在EFLAGS里,我们需要人手取出。在比较a和b的时候,C2=0,C3=(a==b),C0=(a<b)。我们可以将FNSTSW AX指令将浮点标志位复制到AX,然后通过读取C3、C2和C0(分别位于第14、10、8位)来判断结果。下面是一个求浮点数组最大值的汇编函数:
阅读全文
posted @
2009-03-06 04:56
陈梓瀚(vczh) 阅读(1488) |
评论 (0)
|
编辑
收藏
JIT脚本引擎:关于自己的异常处理函数在Release下失效的解决办法
摘要: 本来昨天搞定了异常处理之后决定狂喜一天,谁知道今天用release编译了一下之后竟然挂了!资料找了半天发现是Windows XP之后提供的一项保护SAFESEH搞的鬼。于是需要将自己的异常处理函数添加进PE头的SAFESEH列表中。方法如下:
阅读全文
posted @
2009-03-04 08:40
陈梓瀚(vczh) 阅读(1882) |
评论 (2)
|
编辑
收藏
JIT脚本引擎:使用汇编实现__try和__catch
摘要: 使用上一篇文章的资料,就可以使用汇编实现异常处理了。下面来看一个例子。
阅读全文
posted @
2009-03-03 00:20
陈梓瀚(vczh) 阅读(2268) |
评论 (1)
|
编辑
收藏
JIT脚本引擎:关于X86上Windows 32位操作系统异常处理(SEH)的处理过程
A Crash Course on theDepths of Win32 Structured Exception Handling, MSJ January 1997
http://www.microsoft.com/msj/0197/Exception/Exception.aspx
对于结构化异常处理(SEH)的进一步探索(读后感)
http://vicchina.51.net/research/other/seh/sehadvance.htm
NT 中的异常帧结构和异常嵌套(读后感续)
http://vicchina.51.net/show_article.php?id=65
posted @
2009-03-02 04:45
陈梓瀚(vczh) 阅读(1755) |
评论 (0)
|
编辑
收藏
JIT脚本引擎:stdcall、cdecl和fastcall
摘要: stdcall、cdecl和fastcall的参数都是从右到左入栈,并且返回值遵循以下规律:
小于等于4字节结构用EAX
小于等于8字节结构用EDX:EAX
浮点数用ST(0)
其他则在EAX放置一个指针,供返回值使用
stdcall被调用者清栈,cdecl调用者清栈,fastcall被调用者清栈并且前两个小于等于4字节的参数放入ECX和EDX。返回值和参数如果一方有构造函数或析构函数则不使用寄存器。
于是今天用字符串形式的汇编写了三种调用方法的求和函数:
阅读全文
posted @
2009-03-01 05:27
陈梓瀚(vczh) 阅读(1792) |
评论 (9)
|
编辑
收藏
JIT脚本引擎:用汇编写了一个四则运算字符串分析程序
摘要: 这个汇编程序读入一个字符串,并计算结果。支持加减乘除括号,不支持浮点数,不支持查错。以下是汇编以及注释。汇编程序使用这篇文章的程序编译并执行。
阅读全文
posted @
2009-02-26 09:05
陈梓瀚(vczh) 阅读(2203) |
评论 (0)
|
编辑
收藏
JIT脚本引擎:动态运行文本格式的汇编代码
摘要: 今天完成了文本格式汇编代码的编译工作。这主要是为了调试,因为编译器不可能产生文本格式的汇编代码,这样会很浪费资源。翻译过程如下:
阅读全文
posted @
2009-02-26 01:27
陈梓瀚(vczh) 阅读(3346) |
评论 (2)
|
编辑
收藏
JIT脚本引擎:完成链接器的核心功能
摘要: 光能编译汇编还是不行的,因为很多东西在编译的时候不知道,典型的比如放常量那部分的指针等等。主要原因还是因为x87(指FPU部分)没有指令包含浮点立即数,所有装载浮点常数的指令都要求提供指针。所以诸如double a=1.2;之类的代码,需要将1.2预先放置在一个地方然后确定指针的位置。
于是就遇到了一个问题,如何将编译后才知道的指针地址写进去呢?
阅读全文
posted @
2009-02-22 22:41
陈梓瀚(vczh) 阅读(1919) |
评论 (1)
|
编辑
收藏
JIT脚本引擎:将汇编语言编译成机器码写进内存并在C++中调用
摘要: 在完成了这里和这里的工作之后,就可以写程序生成机器码了。在生成机器码的时候有如下注意事项:
1:可执行代码所在的空间必须使用VirtualAlloc与PAGE_EXECUTE_READWRITE标记分配。
2:程序需要的常量空间、全局变量空间和指令空间需要分开在三个不同的地方。
下面的例子使用一个struct保存指令的每一个部分,并且结合之前产生的指令译码表生成二进制码。
阅读全文
posted @
2009-02-22 07:08
陈梓瀚(vczh) 阅读(4931) |
评论 (11)
|
编辑
收藏
仅列出标题
共35页:
First
18
19
20
21
22
23
24
25
26
Last
留言簿
(70)
给我留言
查看公开留言
查看私人留言
随笔分类
(347)
.NET(3)
2D(14)
3D(12)
C++(54)
C++实用技巧(7)
GacUI(37)
JIT(28)
Vczh Free Script(7)
Vczh Lazy Script(4)
VL++3.0开发纪事(51)
跟vczh看实例学编译原理(4)
脚本技术(47)
开发自己的IDE(13)
其他(23)
启示(30)
作品(13)
好友博客
Graphixer
何咏师弟的图形学网站
jetricy
Jetricy的技术博客
KlayGE游戏引擎
叛叛大神
Lomox UI框架
Lomox UI框架
MiGL
Tyeah的博客
vczh的百度空间
vczh的百度空间
YMK的后花园
YMK的技术博客
德利菲
德利菲的技术博客
怪盗KID的游戏开发博客
怪盗KID的游戏开发博客
华工微软俱乐部
华南理工大学微软俱乐部科技部博客
开发视界
开发视界 - 移动开发社区
老赵点滴
赵姐夫的.net博客
临渊羡鱼,不如退而山寨
另一个SOS团的C++程序员……
某白食(Lyt)
某白食的C++博客
岁月流转,往昔空明
空明流转的blog
微软一站式实例代码库
500个经典示例,速学速用,效率倍增。
我在博客园的blog
我在博客园的blog
一个不靠谱的程序员
JeffChen的技术博客
搜索
最新评论
1. re: 正则表达式——一点小插曲
明天开工。
来踩一下轮子哥的脚印。
--Bread
2. re: 自从昨天我发现VS2012可以编译出支持XP的代码之后,我决定在GacUI里面全面使用C++11新功能
请教一下GACUI可以支持VC2008吗?
--许满哥
3. re: 要学车暂停更新几个星期
@昏人
66666666
--lgjsd
4. re: 伴随我成长的编程书
感觉我要走的道路好长好长
--lzj
5. re: 伴随我成长的编程书
我最喜欢的cppblog上又看到好文章了
--胡然
阅读排行榜
1. 伴随我成长的编程书(164275)
2. 《构造正则表达式引擎》新鲜出炉啦!(109498)
3. 跟vczh看实例学编译原理——零:序言(51138)
4. 如何手写语法分析器(40067)
5. C++实用技巧(一)(38029)
评论排行榜
1. 关于C++之“复杂”(68)
2. (转)架构师已死(转自UML软件工程组织) (57)
3. 2005-2009年个人总结(40)
4. 如何设计一门语言(一)——什么是坑(a)(37)
5. 《构造正则表达式引擎》新鲜出炉啦!(36)