常见各种语言程序入口点代码

Borland Delphi 6.0 - 7.0
00509CB0 > $ 55 PUSH EBP
00509CB1 . 8BEC MOV EBP,ESP
00509CB3 . 83C4 EC ADD ESP,-14
00509CB6 . 53 PUSH EBX
00509CB7 . 56 PUSH ESI
00509CB8 . 57 PUSH EDI
00509CB9 . 33C0 XOR EAX,EAX
00509CBB . 8945 EC MOV DWORD PTR SS:[EBP-14],EAX
00509CBE . B8 20975000 MOV EAX,unpack.00509720
00509CC3 . E8 84CCEFFF CALL unpack.0040694C

Microsoft Visual C++ 6.0
00496EB8 >/$ 55 PUSH EBP ; (初始 cpu 选择)
00496EB9 |. 8BEC MOV EBP,ESP
00496EBB |. 6A FF PUSH -1
00496EBD |. 68 40375600 PUSH Screensh.00563740
00496EC2 |. 68 8CC74900 PUSH Screensh.0049C78C ; SE 处理程序安装
00496EC7 |. 64:A1 0000000>MOV EAX,DWORD PTR FS:[0]
00496ECD |. 50 PUSH EAX
00496ECE |. 64:8925 00000>MOV DWORD PTR FS:[0],ESP
00496ED5 |. 83EC 58 SUB ESP,58

Microsoft Visual C++ 6.0 [Overlay] E 语言
00403831 >/$ 55 PUSH EBP
00403832 |. 8BEC MOV EBP,ESP
00403834 |. 6A FF PUSH -1
00403836 |. 68 F0624000 PUSH Nisy521.004062F0
0040383B |. 68 A44C4000 PUSH Nisy521.00404CA4 ; SE 处理程序安装
00403840 |. 64:A1 0000000>MOV EAX,DWORD PTR FS:[0]
00403846 |. 50 PUSH EAX
00403847 |. 64:8925 00000>MOV DWORD PTR FS:[0],ESP

Microsoft Visual Basic 5.0 / 6.0
00401166 - FF25 6C104000 JMP DWORD PTR DS:[] ; MSVBVM60.ThunRTMain
0040116C > 68 147C4000 PUSH PACKME.00407C14
00401171 E8 F0FFFFFF CALL
00401176 0000 ADD BYTE PTR DS:[EAX],AL
00401178 0000 ADD BYTE PTR DS:[EAX],AL
0040117A 0000 ADD BYTE PTR DS:[EAX],AL
0040117C 3000 XOR BYTE PTR DS:[EAX],AL//或省略第一行的 JMP
00401FBC > 68 D0D44000 push dumped_.0040D4D0
00401FC1 E8 EEFFFFFF call
00401FC6 0000 add byte ptr ds:[eax],al
00401FC8 0000 add byte ptr ds:[eax],al
00401FCA 0000 add byte ptr ds:[eax],al
00401FCC 3000 xor byte ptr ds:[eax],al
00401FCE 0000 add byte ptr ds:[eax],al

BC++
0040163C > $ /EB 10 JMP SHORT BCLOCK.0040164E
0040163E |66 DB 66 ; CHAR ‘f‘
0040163F |62 DB 62 ; CHAR ‘b‘
00401640 |3A DB 3A ; CHAR ‘:‘
00401641 |43 DB 43 ; CHAR ‘C‘
00401642 |2B DB 2B ; CHAR ‘+‘
00401643 |2B DB 2B ; CHAR ‘+‘
00401644 |48 DB 48 ; CHAR ‘H‘
00401645 |4F DB 4F ; CHAR ‘O‘
00401646 |4F DB 4F ; CHAR ‘O‘
00401647 |4B DB 4B ; CHAR ‘K‘
00401648 |90 NOP
00401649 |E9 DB E9
0040164A . |98E04E00 DD OFFSET BCLOCK.___CPPdebugHook
0040164E > \A1 8BE04E00 MOV EAX,DWORD PTR DS:[4EE08B]
00401653 . C1E0 02 SHL EAX,2
00401656 . A3 8FE04E00 MOV DWORD PTR DS:[4EE08F],EAX
0040165B . 52 PUSH EDX
0040165C . 6A 00 PUSH 0 ; /pModule = NULL
0040165E . E8 DFBC0E00 CALL ; \GetModuleHandleA
00401663 . 8BD0 MOV EDX,EAX

Borland C++ 1999
004014D0 VB> /EB 10 jmp short VBto_UNP.004014E2
004014D2 |66:623A bound di,dword ptr ds:[edx]
004014D5 |43 inc ebx
004014D6 |2B2B sub ebp,dword ptr ds:[ebx]
004014D8 |48 dec eax
004014D9 |4F dec edi
004014DA |4F dec edi
004014DB |4B dec ebx
004014DC |90 nop
004014DD -|E9 980057>jmp 0097157A
004014E2 \A1 8B0057>mov eax,dword ptr ds:[57008B]
004014E7 C1E0 02 shl eax,2
004014EA A3 8F0057>mov dword ptr ds:[57008F],eax
004014EF 52 push edx
004014F0 6A 00 push 0
004014F2 E8 C7D116>call <jmp.&kernel32.GetModuleHandleA>

Dasm:
00401000 >/$ 6A 00 PUSH 0 ; /pModule = NULL
00401002 |. E8 C50A0000 CALL ; \GetModuleHandleA
00401007 |. A3 0C354000 MOV DWORD PTR DS:[40350C],EAX
0040100C |. E8 B50A0000 CALL ; [GetCommandLineA
00401011 |. A3 10354000 MOV DWORD PTR DS:[403510],EAX
00401016 |. 6A 0A PUSH 0A ; /Arg4 = 0000000A
00401018 |. FF35 10354000 PUSH DWORD PTR DS:[403510] ; |Arg3 = 00000000
0040101E |. 6A 00 PUSH 0 ; |Arg2 = 00000000
00401020 |. FF35 0C354000 PUSH DWORD PTR DS:[40350C] ; |Arg1 = 00000000

VC8 -> Microsoft Corporation
0043DEE1 Q> E8 2D8D0000 call QQRecord.00446C13 ; (Initial
CPU selection)
0043DEE6 ^ E9 16FEFFFF jmp QQRecord.0043DD01
0043DEEB 55 push ebp
0043DEEC 8BEC mov ebp,esp
0043DEEE 51 push ecx
0043DEEF 53 push ebx
0043DEF0 8B45 0C mov eax,dword ptr ss:[ebp+C]
0043DEF3 83C0 0C add eax,0C
0043DEF6 8945 FC mov dword ptr ss:[ebp-4],eax
0043DEF9 64:8B1D 00000000 mov ebx,dword ptr fs:[0]
0043DF00 8B03 mov eax,dword ptr ds:[ebx]
0043DF02 64:A3 00000000 mov dword ptr fs:[0],eax
0043DF08 8B45 08 mov eax,dword ptr ss:[ebp+8]
0043DF0B 8B5D 0C mov ebx,dword ptr ss:[ebp+C]
0043DF0E 8B6D FC mov ebp,dword ptr ss:[ebp-4]
0043DF11 8B63 FC mov esp,dword ptr ds:[ebx-4]
0043DF14 FFE0 jmp eax
0043DF16 5B pop ebx
0043DF17 C9 leave
0043DF18 C2 0800 retn 8

常见各种语言程序入口点代码

时间: 2024-11-08 08:46:51

常见各种语言程序入口点代码的相关文章

PC逆向之代码还原技术,第二讲寻找程序入口点

PC逆向之代码还原技术,第二讲寻找程序入口点 一丶简介 程序逆向的时候.我们需要知道程序入口点.动态分析的时候以便于看是什么程序编写的. 比如VC++6.0 我们可以写一个程序测试一下 我们写一段代码. F10进行调试.看看是谁调用的main即可. 部分代码拷贝如下: __try { _ioinit(); /* initialize lowio */ #ifdef WPRFLAG /* get wide cmd line info */ _wcmdln = (wchar_t *)__crtGet

第二人生的源码分析 3 程序入口点

所有Windows图形应用程序都是拥有相同的入口点函数WinMain,因此第二人生的程序也不例外.下面先来看看这个函数的代码,如下: //蔡军生 2007/12/28 QQ:9073204 深圳 #001 int APIENTRY WinMain(HINSTANCE hInstance, #002                       HINSTANCE hPrevInstance, #003                       LPSTR     lpCmdLine, #004 

Windows 程序启动性能优化(先载入EXE,后载入DLL,只取有限的代码载入内存,将CPU的IP指向程序的入口点)

一.重定位链接时重定位:目标文件一般由多个节组成,编译器在编译每个目标文件时一般都是从0地址开始生成代码.当多个代码节合成一个代码段时,需要根据其在最终代码段中的位置做出调整.同时,链接器需要对已经解析的符号分配运行时地址.这个过程就是重定位. 加载时重定位:程序中可能调用了DLL,由于EXE是最先被加载的,所以一般都能加载到其想要的内存地址上:而DLL的加载一般在EXE之后,就需要对DLL中的地址进行重定位了. 二.程序的启动过程WIN32程序启动过程包括: (1)操作系统把程序加载到内存,并

Ubuntu16.04 中 Vscode 如何断点调试C语言程序

个人博客链接:Ubuntu16.04 中 Vscode 如何断点调试C语言程序 问题:环境是 Ubuntu16.04,如何使用 Vscode 断点调试C语言程序. 写代码没有调试环境是不能忍受的,所以折腾了一下,最后成功了.折腾的过程是这样的: 1. 首先安装 C/C++ 扩展,直接搜索第一个就是,或者点此 链接 查看其帮助文档进行安装. 2.然后打开当前项目目录,左边点调试选项,点击添加配置,生成了一个launch.json文件,其内容如下: { // Use IntelliSense to

Net Core通用主机项目报错 程序不包含适合于入口点的静态Main

Net Core通用主机的介绍: https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/host/generic-host?view=aspnetcore-2.1 参考官网教程编写代码,编译报错:错误         CS5001     程序不包含适合于入口点的静态 "Main" 方法 错误代码public static async Task Main(string[] args) 问题原因:async Task Main

可执行程序的入口点在那里?(强化概念:程序真正的入口是mainCRTstartup)

今天终于有时间来研究一下一个很大很大的工程编译成一个exe和若干dll后,程序是如果执行它的第一条指令的?操作系统以什么规则来找到应该执行的第一条指令(或说如何找到第一个入口函数的)? 我们以前写windows程序时,都是先写个main()函数,然后再写自己的逻辑:然后编译,然后点击exe就能运行我们的程序了:如果我们用VS2005工具生成一个非空工程,工程会为我们提供一个int _tmain(int argc, _TCHAR* argv[])或WinMain()函数的入口,然后我们在里面添加程

Android程序的入口点是什么,不是Main()吗

很多初入Android开发的网页可能不知道Android程序的入口点是什么,不是main()吗,当然我相信回复onCreate的在字面上不算错,但是你们想的是Activity中的onCreate 方法吧,其实真正的入口点entrypoint是什么. Android使用Google Dalvik VM,相对于传统Java VM而言有着很大的不同,在Sun的Java体系中入口点和标准c语言一样是main(),而每个Android程序都包含着一个Application 实例,一个Application

Android程序的入口点

原文:Android程序的入口点 android应用程序,由一到多个Activity组成.每个Activity没有很紧密的联系,因为我们可以在自己的程序中调用其它Activity,特别是调用自己的代码之外生成的Activity,比如android提供的发短信或者打电话的Activity. Intent call = new Intent(Intent.ACTION_CALL,Uri.parse("tel:"+phonenumber); startActivity(call); Inte

程序定义了多个入口点。使用 /main (指定包含入口点的类型)进行编译

原文:请使用/main进行编译,以指定包含入口点类型 在使用VS工具初学C#的时候需要不停的写小程序,觉得每次都新建项目太过麻烦,所以试着把程序写在一个项目下面,结果编译的时候出错了,因为我每个小程序都使用的Main()方法,而VS的提示信息虽然看得懂原因,却不明白要怎么做,后来查阅MSDN得到解决办法,在此与跟我有同样疑惑的人分享: 解决办法: VS界面点击:项目-->XX属性-->应用程序  在此页有一个启动对象属性设置成你想启动的那个类名就可以了. 另外:/main进行编译是指在CMD命