如何定义入口地址固定的函数
如题,假使我打算把函数my()的入口固定在100H地址上,用C怎么实现?我还想调用my()函数时不直接调用my()而直接转到100H这个地址上,用C怎么实现?(C如果困难...
如题,假使我打算把函数my()的入口固定在100H地址上,用C怎么实现?我还想调用my()函数时不直接调用my()而直接转到100H这个地址上,用C怎么实现?(C如果困难用C嵌入汇编也可!)大侠帮帮忙吧!
事实上我是打算用turboC图形化编程来编写一个鼠标按钮程序,我现在已经实现初始化按钮,然后画按钮,这两个函数!
在按钮消息响应的时候我打算这么写:"while(1){消息响应();}"消息响应()这个函数循环搜寻是否有按钮按下,有则跳转到相应函数,如果函数入口地址固定,则我就可直接给指针变量赋值,叫程序直接跳转到相应函数,这样初始化按钮,画按钮,按钮消息响应这三个函数就可以永久不变,我可以把它生成一个lib,而我主函数仅仅在调用初始化按钮,画按钮,按钮消息响应后加上按钮1的任务函数,按钮2的任务函数,按钮3的任务函数,......便可,这些函数的入口地址便是系统提供的固定地址,换句话说有点像C51的中断函数.不知道怎么实现?如果您有更好的方法我们可以多多交流!谢谢!(操作系统DOS)
再补充一点儿,如果固定函数的入口地址不大可能实现,能不能获取函数的入口地址,我固定函数名,在系统运行之初获取相应函数地址,如果没有相应的函数,跳过这个函数!这个功能能不能实现!
回复catm3 我想知道:for(循环)if exist fun_i funs[i]=fun_i,这个伪码怎么实现? 展开
事实上我是打算用turboC图形化编程来编写一个鼠标按钮程序,我现在已经实现初始化按钮,然后画按钮,这两个函数!
在按钮消息响应的时候我打算这么写:"while(1){消息响应();}"消息响应()这个函数循环搜寻是否有按钮按下,有则跳转到相应函数,如果函数入口地址固定,则我就可直接给指针变量赋值,叫程序直接跳转到相应函数,这样初始化按钮,画按钮,按钮消息响应这三个函数就可以永久不变,我可以把它生成一个lib,而我主函数仅仅在调用初始化按钮,画按钮,按钮消息响应后加上按钮1的任务函数,按钮2的任务函数,按钮3的任务函数,......便可,这些函数的入口地址便是系统提供的固定地址,换句话说有点像C51的中断函数.不知道怎么实现?如果您有更好的方法我们可以多多交流!谢谢!(操作系统DOS)
再补充一点儿,如果固定函数的入口地址不大可能实现,能不能获取函数的入口地址,我固定函数名,在系统运行之初获取相应函数地址,如果没有相应的函数,跳过这个函数!这个功能能不能实现!
回复catm3 我想知道:for(循环)if exist fun_i funs[i]=fun_i,这个伪码怎么实现? 展开
10个回答
展开全部
不如把它们直接做成中断服务函数,用int调用就行了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
typedef void *(*func)(void*);
func my=(func*)0x100;
调用是这样用,不过要给函数代码定在0x100要靠编译才能实现
func my=(func*)0x100;
调用是这样用,不过要给函数代码定在0x100要靠编译才能实现
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
以前的dos环境是偏移地址加上基地址
所以当时可以自己功过编写来达到随意使用内存指针或基指针
但是windows不一样,他的内存空间是动态分配的,地址都不是固定是
在汇编里面可以用lea指令来传送有效地址到变量,然后指向地址内容
当然,你可以用c里面定义指针,在开头主函数下定义一个自己的函数,然后用函数指针指向他, 当然如果你是想把程序的主函数换掉,这我就不能帮你了,毕竟c和汇编不一样,c必须要一个函数来返回处理和核心部分
而汇编则是可以自己调用任何自己定义的函数,主程序可以是任何函数,自己编写的还是固定的都行
所以当时可以自己功过编写来达到随意使用内存指针或基指针
但是windows不一样,他的内存空间是动态分配的,地址都不是固定是
在汇编里面可以用lea指令来传送有效地址到变量,然后指向地址内容
当然,你可以用c里面定义指针,在开头主函数下定义一个自己的函数,然后用函数指针指向他, 当然如果你是想把程序的主函数换掉,这我就不能帮你了,毕竟c和汇编不一样,c必须要一个函数来返回处理和核心部分
而汇编则是可以自己调用任何自己定义的函数,主程序可以是任何函数,自己编写的还是固定的都行
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
试试这样行不行:
typedef void (*pMY)(void); // 定义函数指针
pMY my = (pMY *)0x100; // 定义my()并赋值
typedef void (*pMY)(void); // 定义函数指针
pMY my = (pMY *)0x100; // 定义my()并赋值
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用Shift+4
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |