继上一篇文章,写反汇编确实是费力不讨好,因此用FASM来写一个。
神马?你不知道FASM是虾米东东?一个汇编的编译器而已。
原来接触过,没深入,今天心血来潮搞了一下,下了个最新版的玩玩。
汉化了大部分资源之后发现居然公开IDE的源码,我郁闷。
不过改源码心里没底,毕竟不是自己写的。
用了N个小时做了个自己的库,方便以后自己用。
汇编这种伪指令确实要快上许多,当然用C更快,用易语言更更快,那没啥意思。
代码如下,用了很多我自己的库,大家看懂核心代码即可。
include 'win32s.inc' .GUI .UNICODE entry WinMain .s_code SeShutdownName TCHAR 'SeShutdownPrivilege',0; proc WinMain local hToken : HANDLE NULL; local TokenPrivileges : TOKEN_PRIVILEGES; invoke OpenProcessToken, INVALID_HANDLE_VALUE, TOKEN_QUERY OR TOKEN_ADJUST_PRIVILEGES, addr hToken; cmp eax, 0; je _EXIT; mov [TokenPrivileges.PrivilegeCount], 1; mov [TokenPrivileges.Privileges0.Attributes], SE_PRIVILEGE_ENABLED; invoke LookupPrivilegeValue, NULL, addr SeShutdownName, addr TokenPrivileges.Privileges0.Luid; cmp eax, 0; je _END; invoke AdjustTokenPrivileges, [hToken], FALSE, addr TokenPrivileges, sizeof.TOKEN_PRIVILEGES, NULL, NULL; cmp eax, 0; je _END; invoke NtShutdownSystem, ShutdownPowerOff; _END: cmp [hToken], 0; je _EXIT; invoke CloseHandle, [hToken]; _EXIT: invoke ExitProcess, 0; endp .s_end
得到的反汇编如下
反汇编和汇编几乎一样,但是汇编更加易懂、直观。
文件大小和预计的一样,1.5KB。
决定以后像这样的小东西就用汇编来写了。
不过,像复杂一点的窗体程序,不敢想象那是怎样的痛苦。。。。。。
-------------
我也整理了一个中文版的FASM文档、连同汉化的IDE、如何添加API库的说明一起上传了。
有兴趣的朋友可以去下载玩玩。在我上传的资源里。