打造快速关机迷你程序---FASM

继上一篇文章,写反汇编确实是费力不讨好,因此用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


得到的反汇编如下

打造快速关机迷你程序---FASM_第1张图片

反汇编和汇编几乎一样,但是汇编更加易懂、直观。

文件大小和预计的一样,1.5KB。

决定以后像这样的小东西就用汇编来写了。

不过,像复杂一点的窗体程序,不敢想象那是怎样的痛苦。。。。。。

-------------

我也整理了一个中文版的FASM文档、连同汉化的IDE、如何添加API库的说明一起上传了。

有兴趣的朋友可以去下载玩玩。在我上传的资源里。

你可能感兴趣的:(汇编,null,ide,token,include,编译器)