阅读:2047回复:12
怎么样在DDK下嵌入汇编中改变ebp寄存器的数.
本人工作需要开发一套windows下类似WinFlash的读写BIOS的东东.
基本功能已经实现,可以在非超线程CPU下工作;但在超线程CPU下Erase/Write时候不能正常工作.我已经在GUI层设置好cpu mask; 但现在需要操作Ebp寄存器,~~~在Windows下是不能操作它的啊,该怎么办. 在Driver层我用DDK编译,需要嵌入汇编里需要做以下动作: push ebp move ebp,eax .... pop ebp 欢迎有嵌入汇编开发经验的朋友指点啊. 这已经是我所有的分了啊. |
|
沙发#
发布于:2004-08-01 23:10
其实在DDK里任何地方都可以用汇编~~
但是~!!!EBP寄存器一定小小心使用~!!否则挂了你都不知道怎么死的~――很难找到错误~!!呵呵,好自为知吧~! |
|
板凳#
发布于:2004-07-29 08:41
可以问下怎么给分吗?分虽然少,但也是我的一点心意.
|
|
地板#
发布于:2004-07-29 08:39
OK,谢谢wowocock大佬.
原来这样声明的函数需要自己处理压栈,退出动作.编译器只负责调用此函数的入口点. lovedrvdev: 嵌入的汇编一般都有限制的.用这个方法可以避开某些限制. |
|
地下室#
发布于:2004-07-28 19:13
请问wowocock,我直接用汇编也能完成,为什么还用_declspec(naked)
|
|
5楼#
发布于:2004-07-28 16:50
我现在的代码如下,现在会自动reboot的.
如果去掉 "_declspec(naked) " 声明和对EBP寄存器的操作在非超线程CPU下可以跑的. 是不是我把所有寄存器先保存下来,如下就可以了啊. 大家一起来讨论这个话题啊,好象这个技巧还是很有用的哦,欢迎大家给我点建议. //writeAddr -- Erase/Write ROM address; //pData -- source buf(write). //uCount -- Erase/Write count. //op -- Erase or write. _declspec(naked) void WriteFlash(ULONG WriteAddr, ULONG pData,ULONG uCount,ULONG op) { _asm{ //save all registers pushad //cli mov esi,pData mov ecx,uCount mov edi,WriteAddr push ebp //;danny_MP mov ebp, '$SMI' //;danny_MP mov eax,op mov edx,SMIPort out dx,al cmp ebp,'SMI$' pop ebp jnz Write_Exit lahf xchg al,ah mov RetMessage, eax sti Write_Exit: popad } // return msg; } |
|
6楼#
发布于:2004-07-28 11:51
void _declspec(naked)表示编译器完全不管你的函数了,所以要你自己来平衡堆栈.
_asm { enter x,0 .... leave ret } x为你要使用变量的字节数. BTW网上有专门的WDM汇编开发包,可以用纯汇编来写,不过我觉得还是不方便(玩玩可以),嘿嘿...... |
|
|
7楼#
发布于:2004-07-28 10:44
void _declspec(naked) fucname()
{ _asm { //至少应该加一个ret ret } |
|
|
8楼#
发布于:2004-07-28 09:07
哦,这两天不舒服没上来.
我试了一下,情况和你说的一样啊,都自动重启.是不是还应该更改编译器某些设置才行啊.真不知道Winflash是怎么实现的,我用softice看了他的这段代码啊,都差不多哦. |
|
9楼#
发布于:2004-07-27 21:07
楼上的兄弟,在MSDN找,我有一个问题
我在DRIVERENTRY中嵌入汇编 _asm { ... } 安装成功了 而先定义 void _declspec(naked) fucname() { _asm { //为空,无内容 } } 在DRIVERENTRY中调用,一安装驱动就重启,为什么? |
|
10楼#
发布于:2004-07-26 08:20
大佬,
你说的那个_DECLSPEC (NAKED),我在DDK文档里怎么找不到啊. 汇编可以做任何事情,如果你愿意做的话.我这没什么例子. 你也可以在DDK或别的语言里嵌入汇编写驱动. |
|
11楼#
发布于:2004-07-25 15:48
请问一下,可以用汇编写WDM驱动程序吗?
有什么例子没有? |
|
12楼#
发布于:2004-07-24 09:31
函数申明为_DECLSPEC (NAKED)
|
|
|