继上一篇文章,写反汇编确实是费力不讨好,因此用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库的说明一起上传了。
有兴趣的朋友可以去下载玩玩。在我上传的资源里。