关闭程序基地址改变

Windows vista开始有动态基地址的功能,只要pe头Dll Characteristics有0x40每次加载时基地址都不一样。

相应的IDE,比如VS,也支持动态基址的功能。

1 在VS自己编写的程序中关闭基址改变属性:

①vs中右键项目 -> 属性 -> 链接器 -> 命令行:去掉/DYNAMICBASE加上/FIXED
 #pragma comment(linker,"/BASE:0x500000")   (在vs2017中测试发现只用②就实现了基址固定)

②vs中,右键项目 -> 属性 -> 链接器 -> 高级 -> 随机基址:否

2 逆向已写完的程序,使其基址固定:

去掉IMAGE_OPTIONAL_HEADER.DllCharacteristics的IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE

定位到DllCharacteristics后用位运算

win7下动态获取基址的函数:

void C获得基址Dlg::OnBnClickedButton1()
{
  CString strCaption;
  GetDlgItemText(IDC_EDIT1,strCaption);
  HWND hwnd=::FindWindow(NULL,strCaption);
  DWORD Pid;
  ::GetWindowThreadProcessId(hwnd,&Pid);
  DWORD dwBaseAddr=GetBaseAddr(Pid);
  strCaption.Format(_T("0x%X"),dwBaseAddr);
  SetDlgItemText(IDC_EDIT1,strCaption);
}
DWORD GetBaseAddr(DWORD pid)
{
  HANDLE hModuleSnap=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,pid);
  if (hModuleSnap==INVALID_HANDLE_VALUE)
  {
    AfxMessageBox(_T("创建进程模块失败!"));
  }
  MODULEENTRY32 me;
  me.dwSize=sizeof(MODULEENTRY32);
  Module32First(hModuleSnap,&me);
  DWORD dwBaseAddr;
  dwBaseAddr=(DWORD)me.modBaseAddr;
  CloseHandle(hModuleSnap);
  return dwBaseAddr;
}

参考:http://msdn.microsoft.com/zh-cn/library/f7f5138s.aspx

http://msdn.microsoft.com/zh-cn/library/microsoft.visualstudio.vcprojectengine.vclinkertool.baseaddress.aspx

原文地址:https://www.cnblogs.com/fengxing999/p/10209665.html

时间: 2024-10-01 01:07:40

关闭程序基地址改变的相关文章

打开VS2012项目“关闭程序”

在Win7-32系统上装完VS2012并使用一段时间后,当打开VS2012项目时出现如下对话框: 通过查资料得知这是由于VS2012的漏洞导致的,下载并安装完Microsoft Visual Studio 2012 更新 (KB2781514)文件patch_KB2781514.exe之后,问题得到解决.文件下载地址:http://www.microsoft.com/zh-cn/download/details.aspx?id=36020 打开VS2012项目"关闭程序",布布扣,bu

关于TFS地址改变后,项目迁移的问题。

经常遇到TFS的服务器地址改变,以至于项目全部不能用,如果全部重新打开,然后重新映射,是件很费时.费事的事.但其实是有简单方法的. 找到解决方法文件,即SLN文件. 用记事本打开,找到SccTeamFoundationServer这一节,看到了吧,后面的就是服务器地址,改地址即可.[修改项目的地址] 但并不是这么简单的,这里改的仅仅是项目的地址,但TFS程序的地址还得改.所以单独改了这个是不行的.还得改一处 如果不是XP,则位置在 C:\Users\[用户名]\AppData\Local\Mic

kernel32基地址获得学习笔记

原文:http://www.pediy.com/kssd/index.html -- 病毒技术 -- 病毒知识 -- Anti Virus专题 第一种方法 通过线程初始化时, 获得esp堆栈指针中的ExitThread函数的地址,然后通过搜索获得kernel32.dll的基地址. 线程在被初始化的时,其堆栈指针指向ExitThread函数的地址,windows这样做是为了通过ret返回时来调用ExitThread地址.所以一般我们可以在我们主线程的起始位置(也就是 程序入口点处)通过获得堆栈指针

[C#][VB.NET]关闭程序时显示对话框,用以再次确认是否关闭

[C#][VB.NET]关闭表单时显示对话框,用以再次确认是否关闭 1. 问题描述 关闭程序时显示对话框,用以再次确认是否关闭 2. 方法 只要在 Form Closing 事件,显示 MessageBox,并且当使用者选择 否 时,让 e.Cancel = true 即可 C# 程序 private void Form1_FormClosing(object sender, FormClosingEventArgs e) { if (MessageBox.Show("是否确定要关闭程序&quo

STM32 外设地址映射管理硬件基地址和偏移地址

片上外设区分为四条总线,根据外设速度的不同,不同总线挂载着不同的外设, APB1 挂载低速外设,APB2 和 AHB 挂载高速外设.相应总线的最低地址我们称为该总线的基地址,总线基地址也是挂载在该总线上的首个外设的地址.APB1 总线的地址最低,因此片上外设就从这这个地址开始,也称外设基地址. (1)总线基地址 从存储器映射那张图的 Block2 可以看到,分为 4 大块,每块都有一个起始地址,这个起始地址就是基地址,然后到下一块起始地址的时候就会和前一块地址出现偏差,这个差值就是偏移量,即相对

Windows下利用bat批量打开程序,关闭程序

打开程序 在工作中,每次开机会流程化的打开很多软件,比如:sublime text.notepad++(总觉得用notepad看txt文件比较顺眼).spyder.微信.qq……,手动挨个点太麻烦,设置为开机启动的话又太慢(由于装了Oracle,开机已经很慢了). 后来了解到可以用bat文件来封装这些操作,格式如下: start /d "文件路径" 执行文件 使用步骤: 1.新建txt文件 2.编辑内容,示例如下: start /d "D:\softwares\QQ\Bin&

QT程序拷贝 转移 改变运行环境

qt程序 在windows平台下怎么运行? 以前开发环境是VS2008编译 +qt-win-opensource-4.7.4-vs2008框架 +QtCreator编辑界面(以前的例子,win7下成功安装Qt4.7).         现在需要把程序拷贝到另一台计算机上进行网络测试,不想重新安装VS2008,也不想进行部署qt程序,拷贝dll文件,就想搭配一个简单的qt开发环境或运行环境.于是安装如下简单的环境,进行测试. QT Mingw的安装,Qt for windows安装及设置Qt+Mi

分享常见网站的爬虫程序下载地址[微信|微博|企信|知乎|优酷|京东]

给大家分享一些常见网站的爬虫程序获取地址,站长.数据分析师.爬虫工程师们有福利了!!!大家都懂的,好东西不轻易说出去~ 1.微信公众号文章采集:http://www.shenjianshou.cn/index.php?r=market/configDetail&pid=157 2.新浪微博采集:http://www.shenjianshou.cn/index.php?r=market/configDetail&pid=139 3.企信工商信息采集爬虫:http://www.shenjian

Weblogic 12c ip 地址改变如何配置

Weblogic 12c ip 地址改变如何配置 1. 在weblogic 安装的路径找到之前创建的域下的jwxt-jdbc.xml文件:如我安装的路径为 (C:\Oracle\Middleware\Oracle_Home\user_projects\domains\xgjw_domain\config\jdbc) 在改路径下修改所有后缀名*.xml文件配置的url的ip地址: 例如:修改数据源url的ip地址为变动后的ip:如之前为(10.10.160.17 变为 10.17.1.236) 2