`
webcenterol
  • 浏览: 906772 次
文章分类
社区版块
存档分类
最新评论

从最简单的Win32汇编程序,HelloWorld说起

 
阅读更多

从最简单的Win32汇编程序,HelloWorld说起

write by 九天雁翎(JTianLing) -- blog.csdn.net/vagrxie

讨论新闻组及文件

自从开始弄反外挂以来,我的个人目标很明确,就是借此机会,好好的重新学习Win32汇编,当年买了书,开始学了一下因为C++学习的紧迫性,就放弃了。。。这和Python当年学习的过程几乎是一样的。。。。。呵呵,人生真是戏剧性,当工作后,我因为工作需要学习了lua后,重拾对脚本语言的兴趣,对C++的学习紧迫性也没有那么强了(毕竟完全可以应付工作了,真是完全,我还没有因为C++语法的问题在工作中卡过,剩下需要学习的就是思想了),所以又开始扛着《Python核心编程》啃,最近反外挂的工作竟然也在工作中用了python一把,真是戏剧性啊。。。。。现在要反汇编嘛,乘机好好学好汇编吧。。。。我发现我对于越底层的东西好像兴趣越大。。。。不知道为什么,也许是因为毕竟是学硬件出身吧。。。。。。底层的东西离硬件近点。。。。但是怎么解释我去学习LUA,Python呢?所以结果还是没有办法解释。。。。。。。。。

书中的例子很简单,源代码如下:

.486; create 32 bit code
.modelflat, stdcall; 32 bit memory model
optioncasemap:none; case sensitive

includewindows.inc
includemasm32.inc
includeuser32.inc
includekernel32.inc

includelibmasm32.lib
includelibuser32.lib
includelibkernel32.lib


.data
szCaptiondb"A MessageBox !",0
szTextdb"Hello,World !",0


.code

start:
invokeMessageBox,NULL,offsetszText,/
offsetszCaption,MB_OK
invokeExitProcess,NULL

endstart

然后编个makefile:

对了,书中是建议去下载微软的nmakeVS中都有的,但是我不知道是否和GNU make完全兼容,我只学过GNU make,并且好像也不太像去学微软的nmake语法(咋一看好像差不多),所以我下了个windows 版的GNU make来用,幸好还真有这个东西:)

makefile:

1 basename = helloWorld
2 exe = helloWorld.exe
3 obj = helloWorld.obj
4 files = helloWorld.asm
5 $(exe) :$(obj)
6 link /subsystem:windows /map:$(basename).map /out:$(exe)$(obj)
7 $(obj) :$(files)
8 ml /c /coff /Zi $(files)

这个makefile写的有点复杂了-_-!呵呵,还好例子简单。。。。。

然后用make命令编译就好了。。。。。这里因为我用了vim。。。所以一切都简单了很多,呵呵,其实大家假如用UE,EditPlus也不会坏到哪去,反正越是接触的语言越多,你也会越希望有个万能的编辑器的。。。。当然,万能的IDE最好。

编译,运行,都没有问题,但是,有的人脑袋就是进水了,因为我没有自己push去传递参数,也因为习惯了C++程序中微软做一大堆手脚,总感觉不踏实,我想看看这个程序中微软是不是也在我背后干了什么。。。。。。(C语言程序员不喜欢C++,其中一个很大的理由就是他们觉得编译器背着他们干了太多,他们不踏实,其实去看看<inside c object>然后多反汇编几次C++程序,要达到基本理解C++编译器干了些什么好像也不是太难。。。。。。但是起码比C语言干的多。。。又说了一大堆没有用的话,我发现我的文中有用的信息越来越少了,都是我东扯西扯。。。) </inside>

回到主题,于是我先看了一下生成的exe文件,发现无缘无故多了.rdata区段,虽然我并没有用,所以程序达到了4k(好像是普通不修改PE文件时最小的一个可执行程序的大小),反汇编一下生成的exe文件(还能叫反汇编吗-_-!)

00401000 >/$ 6A 00 push 0 ; /Style = MB_OK|MB_APPLMODAL

00401002 |. 68 00304000 push 00403000 ; |Title = "A MessageBox !"

00401007 |. 68 0F304000 push 0040300F ; |Text = "Hello,World !"

0040100C |. 6A 00 push 0 ; |hOwner = NULL

0040100E |. E8 07000000 call <_messageboxa f user32:user32.dll> ; /MessageBoxA </_messageboxa>

00401013 |. 6A 00 push 0 ; /ExitCode = 0

00401015 /. E8 06000000 call <_exitprocess f kernel32:kernel32.dll> ; /ExitProcess </_exitprocess>

0040101A > $- FF25 08204000 jmp dword ptr [] ; _MessageBoxA@16 0040101a f user32:user32.dll

00401020 > .- FF25 00204000 jmp dword ptr [] ; _ExitProcess@4 00401020 f kernel32:kernel32.dll

我只能说,总算在我们程序背后没有什么在偷偷摸摸进行了,一切就像我们的源代码一样,这正是我们需要的境界。。。。。用汇编这点还是好(其他高级语言使用者基本可以忽视此句)

write by 九天雁翎(JTianLing) -- blog.csdn.net/vagrxie

分享到:
评论

相关推荐

    第一个汇编程序-Hello World

    第一个汇编程序-Hello World 调用MessageBoxA弹出对话框

    win32汇编程序设计教程

    本书从编写应用程序的角度,从“Hello World!”这个简单的例子开始到编写多线程、注册表和网络通信等复杂的程序,通过60多个实例逐渐深入Win32汇编语言的方方面面。本书作者罗云彬拥有十余年汇编语言编程经验,是...

    MFC 编写的最简单的程序 Helloworld

    MFC 编写的最简单的程序 Helloworld MFC 编写的最简单的程序 Helloworld MFC 编写的最简单的程序 Helloworld

    极其简单的微信小程序HelloWorld示例

    极其简单的微信小程序Hello World示例! A Simple WeChat Miniprogram Demo!

    Win32汇编语言程序设计(罗云彬)chm

    本书从编写应用程序的角度,从“Hello World!”这个简单的例子开始到编写多线程、注册表和网络通信等复杂的程序,通过60多个实例逐渐深入Win32汇编语言的方方面面。本书作者罗云彬拥有十余年汇编语言编程经验,是...

    汇编hello world实例

    汇编编写hello world,供学习和交流使用,希望大家喜欢

    罗云斌win32汇编.rar

    本书从编写应用程序的角度,从“Hello World!”这个简单的例子开始到编写多线程、注册表和网络通信等复杂的程序,通过60多个实例逐渐深入Win32汇编语言的方方面面。本书作者罗云彬拥有十余年汇编语言编程经验,是...

    java中最简单的HELLOWORLD程序

    java中最简单的HELLOWORLD程序

    Windows环境下32位汇编语言程序设计:罗云彬2013最新版随书资源

    《Windows环境下32位汇编语言程序设计》从编写应用程序的角度,从“HelloWorld"这个简单的例子开始到编写多线程、注册表和网络通信等复杂的程序,通过60多个实例逐渐深入Win32汇编语言的方方面面。Windows环境下32位...

    Win32汇编语言编程(罗云彬编)

    本书从编写应用程序的角度,从“Hello World!”这个简单的例子开始到编写多线程、注册表和网络通信等复杂的程序,通过60多个实例逐渐深入Win32汇编语言的方方面面。本书作者罗云彬拥有十余年汇编语言编程经验,是...

    山东大学微处理器原理实验1.1工程文件 汇编程序 HelloWorld

    山东大学微处理器原理实验1.1工程文件 汇编程序 HelloWorld 详解博客地址:https://blog.csdn.net/m0_52316372/article/details/125664344

    一个简单的qt版helloworld程序

    一个简单的qt版helloworld程序

    hello world hello world

    hello world

    汇编语言hello,world

    汇编语言hello,world。执行可参考https://blog.csdn.net/qq_40739451/article/details/94191843

    Windows环境下32位汇编语言程序设计(典藏版)分卷压缩:Part1/2

    Windows环境下32位汇编语言程序设计(典藏版)(带书签):本书从编写应用程序的角度,从“Hello World!”这个简单的例子开始到编写多线程、注册表和网络通信等复杂的程序,通过70多个实例逐步深入Win32汇编语言编程的...

    汇编helloworld

    汇编语言第一个入门程序,helloworld的asm格式文档

    Win32汇编语言程序设计

    本书从编写应用程序的角度,从“Hello World!”这个简单的例子开始到编写多线程、注册表和网络通信等复杂的程序,通过60多个实例逐渐深入Win32汇编语言的方方面面。本书作者罗云彬拥有十余年汇编语言编程经验,是...

    汇编语言实现输出helloworld

    简单的程序,没办法,为了尊重网站吧,谅解哈~

    Win32汇编语言教程

    本书从编写应用程序的角度,从“Hello World!”这个简单的例子开始到编写多线程、注册表和网络通信等复杂的程序,通过60多个实例逐渐深入Win32汇编语言的方方面面。本书作者罗云彬拥有十余年汇编语言编程经验,是...

    Windows环境下32位汇编语言程序设计

    本书从编写应用程序的角度,从“Hello World!”这个简单的例子开始到编写多线程、注册表和网络通信等复杂的程序,通过60多个实例逐渐深入Win32汇编语言的方方面面。本书作者罗云彬拥有十余年汇编语言编程经验,是...

Global site tag (gtag.js) - Google Analytics