阅读:2205回复:10
如何在vc的嵌入汇编中调用一个类的静态成员函数
请教各位:
如何在vc的嵌入汇编中调用一个类的静态成员函数,既_asm call ???.另如何在嵌汇编中访问一个类的静态变量,既_asm mov eax,???. |
|
最新喜欢:flyfox
|
沙发#
发布于:2002-03-11 14:54
#include \"windows.h\"
#include \"stdio.h\" #include \"conio.h\" #include \"stdlib.h\" class CDemo { public: CDemo(){}; ~CDemo(){}; static int DemoOut(){ printf( \"asdfja;dsfl\\n\" ); return 0; } }; void main() { int funcAddr = ( int )CDemo::DemoOut; __asm { mov eax, funcAddr; call eax; } } |
|
板凳#
发布于:2002-03-11 15:19
|
|
地板#
发布于:2002-03-11 15:26
局部变量也可类似实现,不过这样有意思吗?一般的做法都是用C来包装汇编代码。
|
|
地下室#
发布于:2002-03-11 15:27
局部变量也可类似实现,不过这样有意思吗?一般的做法都是用C来包装汇编代码。
还有,斑竹,为什么我的代码拷过来,缩进就没有了? |
|
5楼#
发布于:2002-03-11 15:35
网速慢,居然重发了,斑竹把废帖删了吧。
|
|
6楼#
发布于:2002-03-11 15:58
我想在类中封装一些RING0级的操作,不想让他们零零散散的,所以就在类中封装他们,是不我有点手拙呀?在这谢谢各位指点。
[编辑 - 3/11/02 作者: guoj] 谢谢:fracker你的方法在一般的情况下好使,我刚才是过了,可是当在下面的情况下怎么办? __declspecl(naked) void test() { int TempAddress=(int)demo::function _asm mov eax,TempAddress _asm call eax } 好象是NAKED 中不能声名自动变量TempAddress,还望fracker指点. [编辑 - 3/11/02 作者: guoj] |
|
|
7楼#
发布于:2002-03-11 18:17
这种方法在经过__declspecl(naked) 定义的函数中不起作用,而我又不想为此创建一个全局变量至破坏类的封装,我该如何处理?
_asm mov eax,offset 类名::function//?????? _asm call eax //???????????? |
|
|
8楼#
发布于:2002-03-12 12:45
那
void TestEx() { int funcAddr = ( int )CDemo:emoOut; __asm { mov eax, funcAddr; call eax; } } __declspecl(naked) test() { TestExt(); } 能编译通过吗? |
|
9楼#
发布于:2002-03-12 13:22
这种方法在经过__declspecl(naked) 定义的函数中不起作用,而我又不想为此创建一个全局变量至破坏类的封装,我该如何处理? 我刚才还试了一下,出错信息告诉我不能在nake函数里面自动初始化变量,我把他改成了这样,编译就通过了: __declspecl(naked) test() { int tmpAddr; tmpAddr = ( int )...; __asm { mov eax, tmpAddr; call eax } } |
|
10楼#
发布于:2002-03-12 18:15
ok编译通过了,可是我得程序还有问题,就是通过类的静态函数(仿CIH获得RINGO权限方式)老是出错。
不过该谢谢fracker了,给分。 |
|
|