在main函数之前跑代码的方法

方法: 手工找到程序入口点, 替换为我们自己的函数

  1. 写测试程序
  2. // test.cpp : Defines the entry point for the console application.
  3. //
  4. #include "stdafx.h"
  5. #include <windows.h>
  6. #include <crtdbg.h>
  7. /// 程序入口点 00671140 >|?  55            push    ebp
  8. /// 用OD可知
  9. extern "C" void mainCRTStartup(void);
  10. int foo()
  11. {
  12. /**
  13. 00671020
  14. */
  15. /// 执行不带CRT函数的代码
  16. MessageBox(NULL, "foo before main", "test", MB_OK);
  17. mainCRTStartup();
  18. return 0;
  19. }
  20. int main(int argc, char* argv[])
  21. {
  22. /** ALT + 8
  23. 00671080
  24. */
  25. foo();
  26. printf("&main = %p\n", &main);
  27. getchar();
  28. return 0;
  29. }

用DASM窗口记录foo函数的地址为 0x00671020

用WinHex打开PE文件, 找到程序入口点在0x100, 内容为0x1140, 修改程序入口点为0x1020.

手工查找程序入口点的方法: http://blog.csdn.net/lostspeed/article/details/49506193

修改后

运行效果

在程序中单步,看看效果

可以看到程序先运行到了foo, 而不是main.

http://blog.csdn.net/lostspeed/article/details/49748555

在纯C工程的main函数之前跑代码(手工找到程序入口点, 替换为我们自己的函数)的更多相关文章

  1. 在C++工程中main函数之前跑代码的廉价方法(使用全局变量和全局函数)

    // test.cpp : Defines the entry point for the console application. // #include "stdafx.h" ...

  2. 如何为WPF添加Main()函数 程序入口点的修改

    一般的.WPF的Main()函数是自动生成的,不过有时候我们需要为我们的应用程序传参.那么自动生成的Main()函数就不会满足我们的要求. 那么如何为WPF Application 设置Main()函 ...

  3. Dllimport函数時无法在Dll中找到的入口点

    今天開發客戶提供的一個dll時出現無法找到入口點問題,由於客戶也不能明確說明dll,所以一時不知道如何下手,經查詢後找到可通過vs自帶的dumpbin.exe查看. Dumpbin.exe位于 VS的 ...

  4. android 没有main函数,怎么找到程序执行入口呢?以及activity主要生命周期的方法说明

    android应用程序,由一到多个Activity组成.每个Activity没有很紧密的联系,因为我们可以在自己的程序中调用其它Activity,特别是调用自己的代码之外生成的Activity,比如a ...

  5. 如何写好 C语言 main 函数!你准备好编写 C 程序了吗?

    学习如何构造一个 C 文件并编写一个 C main 函数来成功地处理命令行参数.   我知道,现在孩子们用 Python 和 JavaScript 编写他们的疯狂"应用程序".但是 ...

  6. UE4之Slate:纯C++工程配置

    概述: Slate是UE4提供的UI框架,整个UE4 Editor UI都是使用Slate构建的: Slate的官方文档:[Slate UI框架] Slate底层内容,中文环境下能搜索到的有效资源也不 ...

  7. 程序清单 8-8 exec函数实例,a.out是程序8-9产生的可执行程序

    /* ============================================================================ Name : test.c Author ...

  8. inux关于readlink函数获取运行路径的小程序

    inux关于readlink函数获取运行路径的小程序   相关函数: stat, lstat, symlink 表头文件: #include <unistd.h> 定义函数:int  re ...

  9. 软件看门狗--别让你地程序无响应(使用未公开API函数IsHungAppWindow,知识点较全)

    正文一.概述一些重要的程序,必须让它一直跑着:而且还要时时关心它的状态——不能让它出现死锁现象.当然,如果一个主程序会出现死锁,肯定是设计或者编程上的失误.我们首要做的事是,把这个Bug揪出来.但如果 ...

随机推荐

  1. Oracle Licensing

    Oracle根据什么来计算License的? Unlimited License Agreements Unlimited License Agreements通常简称ULA,表示在一个固定期限内(2 ...

  2. 【转】管理员必备的Linux系统监控工具

    原文连接: 管理员必备的Linux系统监控工具 #1: top - 进程活动 top提供一个当前运行系统实时动态的视图,也就是正在运行进程.在默认情况下,显示系统中CPU使用率最高的任务,并每5秒钟刷 ...

  3. IE6/7/8 CSS兼容性问题和解决方法汇总

    断断续续的在开发过程中收集了好多的bug以及其解决的办法,都在这个文章里面记录下来了!希望以后解决类似问题的时候能够快速解决,也希望大家能在留言里面跟进自己发现的ie6 7 8bug和解决办法! 1: ...

  4. Android学习笔记:如何高效显示图片,避免内存溢出 和 ImageView无法显示大尺寸的图片

    因为手机的内存资源是有限的,每个app可使用的内存是受限的.而现在采用高分辨率拍的照片往往很大.如果加载时不注意方法,很有可能会引起java.lang.OutofMemoryError: bitmap ...

  5. Android 文件共享服务器

    http://download.csdn.net/detail/liduanw/6271075 你可以将自己的手机作为(局域网)服务器,  使用方法: 1> 指定共享根目录 2> 点击启动 ...

  6. 应用程序无法正常启动0xc000007b

    参考: http://jingyan.baidu.com/article/ff42efa9181bbbc19e22022f.html DirectX修复工具: http://blog.csdn.net ...

  7. mysql 参数optimizer_switch

    mysql 5.1中开始引入optimizer_switch, 控制mysql优化器行为.他有一些结果集,通过on和off控制开启和关闭优化器行为.使用有效期全局和会话两个级别,在5.5中optimi ...

  8. C# 课堂总结4-类(常用的类)

    一.string类 1. str.Length:字符串的长度 *****str[索引号] 2. str.Trim():去除左右两边的空格 *****str.TrimStart():去掉左边的空格str ...

  9. BZOJ 2795: [Poi2012]A Horrible Poem( hash )

    ...字符串hash. 假如长度x是一个循环节, 那么对于任意n(x | n)也是一个循环节. 设当前询问区间[l, r]长度为len = ∏piai, 最终答案ans = ∏piai' ,我们只需枚 ...

  10. HDOJ 1005

    Input The input consists of multiple test cases. Each test case contains 3 integers A, B and n on a ...