kri*_*ous 8 c compiler-construction oop assembly
这与一系列面向对象的C贴片有关,但不同之处在于我不想要所有的功能,只有一个:
能够做到这一点:
struct foo {
int (*bar)(void);
char baz;
};
Run Code Online (Sandbox Code Playgroud)
然后有一个反向引用.C有一个名为cdecl的调用约定; 基本上将参数推送到堆栈,有一个返回指针,然后跳转到某个地址.该地址的代码从堆栈中弹出参数并继续它的快乐方式.
thiscall约定略有不同,因为它隐式地添加了一个额外的参数,一个"this"指针.
既然你可以开始用C执行任意字节码很容易,因为GCC支持内嵌汇编模板,这听起来像你可能只是做一些宏,以便你可以喜欢做一些事情:
int bar(void) {
GETTHIS;
cThis->baz = 0;
}
int createFoo(struct Foo*pFoo) {
ASSIGN(pFoo, bar);
}
Run Code Online (Sandbox Code Playgroud)
基本上什么ASSIGN会做的是在好歹台阶CDECL来模拟thiscall风格公约,那么什么获得OS 3.0会做的是会计把戏的另一边.
我想知道是否:
只有这一点; 真正的"我们所有人都同意成年人"风格的会员功能,简直太棒了.谢谢!
笔记:
我的朋友最终得到了它:https : //gist.github.com/1516195 ... 需要指定函数参数并且仅限于 x86_64 ... 但是是的,这是一个非常好的折衷方案,使事情变得非常不引人注目。