载入HelloWorld.exe之后我们看看加载了哪些模块:

查看一下堆栈:

都是ntdll中的函数,我们想要运行到HelloWorld.exe的main函数中停下。

这么办:

使用!dh命令。

帮助文档中给出!dh的解释如下:

The !dh extension displays the headers for the specified image.

Parameters

Options

Any one of the following options:

-f

Displays file headers.

-s

Displays section headers.

-a

Displays all header information.

Address

Specifies the hexadecimal address of the image.

执行命令:

可以看到入口点地址为112C6,这个是RVA,即相对虚拟地址。什么是相对虚拟地址呢?我们往下看。

我们使用lm命令查看到start下的地址,就是HelloWorld.exe模块加载到内存之后的一个虚拟地址的起始位置,之所以称之为虚拟地址,就是因为它是在4G内存(32位)中的一个相对位置。

这里是0x1180000:

而相对虚拟地址就是相对于1180000的位置再偏移112C6,即112C6+1180000 = 11912C6,得到的就是入口点的虚拟地址。再不明白就如下图所示:

这时我们得到入口点的地址为11912C6,下断点:

运行,命中0号断点:

此时Disassembly窗口显示如下:

再单步运行一步就跳到了main:

对应的Disassembly窗口显示如下:

顺便提一下:

push ebp

mov ebp,esp

是典型的进入一个函数的头两个指令。他们的作用是将上一个函数的基址先进栈,而后将当前esp所指位置设为当前函数的基址。

这里的”___security_init_cookie“是设置一个security cookie,防止堆栈溢出,以后可以跟进这个call,查看具体实现的细节,相关内容可以参考:

http://blog.sina.com.cn/s/blog_4e0987310101ie77.html

跟入

__tmainCRTStartu

可以看到该main函数中具体细节。

windbg 之 如何定位进程入口点地址的更多相关文章

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

    一.重定位链接时重定位:目标文件一般由多个节组成,编译器在编译每个目标文件时一般都是从0地址开始生成代码.当多个代码节合成一个代码段时,需要根据其在最终代码段中的位置做出调整.同时,链接器需要对已经解 ...

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

    今天终于有时间来研究一下一个很大很大的工程编译成一个exe和若干dll后,程序是如果执行它的第一条指令的?操作系统以什么规则来找到应该执行的第一条指令(或说如何找到第一个入口函数的)? 我们以前写wi ...

  3. ------ Tor(洋葱路由器)匿名网络源码分析——主程序入口点(一)------

    --------------------------------------------------------<概览> tor 的源码包可以从官网下载,可能需要预先利用其它FQ软件才能访 ...

  4. (转) MFC的入口点与消息循环,消息映射

    博文分析的很不错,尤其是替换默认窗口过程的这块,本人觉得,所有的这些都可以参阅侯杰的<深入浅出MFC >. 来自:http://blog.csdn.net/sryan/article/de ...

  5. 在纯C工程的main函数之前跑代码(手工找到程序入口点, 替换为我们自己的函数)

    在main函数之前跑代码的方法 方法: 手工找到程序入口点, 替换为我们自己的函数 写测试程序 // test.cpp : Defines the entry point for the consol ...

  6. vs/windows程序找不到入口点cuvidGetDecodeStatus于AppDecGL.exe动态链接库上

    解决方法:这个问题的原因是由于使用的英伟达显卡驱动版本不够新,更新显卡驱动即可. 找了一个多月的原因,终于知道起源了.最终问题还是出在了nvcuvid.lib/.dll上面.通过分析vs调试信息可以得 ...

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

    PC逆向之代码还原技术,第二讲寻找程序入口点 一丶简介 程序逆向的时候.我们需要知道程序入口点.动态分析的时候以便于看是什么程序编写的. 比如VC++6.0 我们可以写一个程序测试一下 我们写一段代码 ...

  8. 脱壳:OEP(即程序入口点)查找 --- 基本思路和常见方法

    OEP:程序的入口点,软件加壳就是隐藏了OEP(或者用了假的OEP), 只要我们找到程序真正的OEP,就可以立刻脱壳. PUSHAD (压栈) 代表程序的入口点, POPAD (出栈) 代表程序的出口 ...

  9. C# 一、语法结构、注释、命名空间、Main入口点、变量与常量、运算符、流程控制(循环)

    一.代码结构 1)一个 C# 程序主要包括以下部分: 命名空间声明(Namespace declaration) 一个 class Class 方法 Class 属性 一个 Main 方法 语句(St ...

随机推荐

  1. 第2章 熟悉Eclipse开发工具---- System.out.println("sum="+(a+b));

  2. C语言的常用字符串操作函数(一)

    一直做的是单片机相关的程序设计,所以程序设计上更偏向底层,对于字符串的操作也仅限于液晶屏幕上的显示等工作,想提高下字符串操作的水平,而不是笨拙的数组替换等方式,翻看帖子发现C语言的字符串操作函数竟然这 ...

  3. ios NSComparator 三种枚举类型

    NSComparator有3种枚举类型 NSOrderedDescending 降序,但是用他可以实现升序或者降序都没问题. NSOrderedAscending 升序,但是目前没有使用出任何效果.. ...

  4. php模拟post 提交表单

    <?php header('Content-type: text/html;charset=UTF-8'); $action=$_REQUEST['action']; //获取验证码 if($a ...

  5. C: strcpy & memcpy & scanf/printf format specifier.. escape characters..

    well, strcpy differs from memcpy in that it stops copy at \0 the format specifier is a string.. whic ...

  6. Tsung记录

    1.提高Tsung登录用户数 ulimit -n (65530)修改系统最大连接数,Tsung压力机和服务器都需要更改

  7. 答辩系统bug修改记录

    1.验证码不显示 参考Could not initialize class sun.awt.X11GraphicsEnvironment解决 在catalina.sh里加上一句 “CATALINA_O ...

  8. 当引用了Properties.Settings后,如果执行的时候,出现"配置系统无法初始化" 或者 某某节点不正确

    自定义了一个 PowerConfig命名空间   PowerSettings.Settings 然后一个exe,引用了该dll,在app.cinfig里增加了配置项 <applicationSe ...

  9. shell中的cat和文件分界符(<<EOF)

    在shell中,文件分界符(通常写成EOF,你也可以写成FOE或者其他任何字符串)紧跟在<<符号后,意思是分界符后的内容将被当做标准输入传给<<前面的命令,直到再次在独立的一行 ...

  10. JTAG上有多个设备时,该如何接呢?

    首先要了解JTAG管脚相关定义,具有JTAG口的芯片都有如下JTAG引脚定义(是相对芯片): TCK——测试时钟输入: TDI——测试数据输入: TDO——测试数据输出: TMS——测试模式选择,TM ...