如何把C格式的函数翻译成汇编的,顺便问下个人的一个程序问题

ywwow 2007-06-12 11:35:11
比如说 addr 应该在什么时候加上。

最近要交个程序作业,打算写个可以关机的程序。要用到AdjustTokenPrivileges等一些函数。但是一直没找到这几个API函数的汇编版本。

我试着翻译了一下,但是运行后没有反应,也不知道是哪里出了错。代码如下:

Reboot proc
LOCAL hToken: HANDLE
LOCAL tkp: TOKEN_PRIVILEGES
LOCAL tkpnew: TOKEN_PRIVILEGES
LOCAL hhh: DWORD

invoke GetCurrentProcess
mov hhh,eax
invoke OpenProcessToken, hhh, TOKEN_ADJUST_PRIVILEGES OR TOKEN_QUERY, addr hToken
invoke LookupPrivilegeValue,NULL,offset rebootname, addr tkp.Privileges[0].Luid

mov tkp.PrivilegeCount,1
mov eax,SE_PRIVILEGE_ENABLED
mov tkp.Privileges[0].Attributes ,eax
invoke AdjustTokenPrivileges, hToken, FALSE, addr tkp, sizeof tkpnew, addr tkpnew, 0
invoke ExitWindowsEx,EWX_REBOOT, 0
ret
Reboot endp

那个rebootname,在之前的.data里面已经有定义,我定义为rebootname db "SE_SHUTDOWN_NAME",0

汇编和C都在学习中,很多东西还一知半解。希望哪位高手能帮下忙,不吝赐教。
...全文
171 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
rularys 2007-06-13
  • 打赏
  • 举报
回复
错的可能是API的用法,你再看看各个参数都设置正确了没,还有返回值要不要检查等.
mengshijie_1981 2007-06-13
  • 打赏
  • 举报
回复
当c语言函数的参数是指针或者数组时,翻译为汇编过程时,相应的参数前面要加上addr或者offset,以告诉编译器,把该参数当成指针看待。

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧