这是一个我经常遇到的问题,我们经常会遇到这样的情况:我们必须重新捕获内存转储,因为内存转储是以“错误”的方式捕获的.简而言之:如果在64位计算机上执行32位进程,则需要使用允许创建32位转储的工具捕获转储. 怎么知道进程是32位的? 如果您在64位计算机上,可以检查任务管理器以查看您的进程正在使用的体系结构. 带*32的进程是32位的,其余的是64位的,因此在上面的示例中,我们可以看到QQ.exe正在执行32位代码. 为什么用正确的工具捕捉它们很重要? 如果使用捕获64位转储的工具捕获转储,您仍…
今天我们探索一个问题: 64位的ntdll是如何被加载到WoW64下的32位进程?今天的旅程将会带领我们进入到Windows内核逻辑中的未知领域,我们将会发现32位进程的内存地址空间是如何被初始化的. WoW64是什么? 来自MSDN: WOW64是允许32位Windows应用程序无缝运行在64位Windows的模拟器. 换句话说,随着64位版本Windows的引进,Microsoft需要拿出一种允许在32位时代的Windows程序与64位Windows新的底层组件无缝交互的解决方案.特别是64…
Win7 64位电脑上进行visual studio的数据库项目的CLR存储过程进行调试时,报错: ---------------------------Microsoft Visual Studio---------------------------无法调试 .NET 代码.未能附加到“<计算机名>”上的 SQL Server 进程.Visual Studio 远程调试监视器 (MSVSMON.EXE) 的 64 位版本无法调试 32 位进程或 32 位转储.请改用 32 位版本.----…
转载自: https://blog.poxiao.me/p/wow64-process-inject-dll-into-x64-process/ 向其他进程注入DLL通常的做法是通过调用CreateRemoteThread这个API在目标进程内创建一个远程线程,用这个线程来调用LoadLibraryA或LoadLibraryW(下文统称LoadLibrary)以实现让目标进程加载指定的DLL文件.使用CreateRemoteThread创建一个远程线程需要传入一个线程过程函数的地址,并且这个函数…
在64位系统下,首先要判断进程是32位,还是64位 在Win8之前,进程名后带星号(*)则是32位进程.但Win8.1后,则不显示星号.需要选出“平台”列,来确认32位,还是64位. 在64位系统下的DUMP转储方式 当进程以64位运行时,直接用任务管理器,即可. 当进程以32位运行时,若使用默认任务管理器转储,则转储的DUMP无法正确分析.此时错误现象是,WinDbg可加载sos,但无法执行!XX命令. 比如执行!EEVersion,则报错:SOS does not support the c…
64位系统上,32位进程拷贝文件到"System32"目录时,会被文件系统重定向到"SysWOW64"目录 要禁用这种重定向,需要用到下面2个API: Wow64DisableWow64FsRedirection() Wow64RevertWow64FsRedirection() 下面是微软的示例代码: #ifdef _WIN32_WINNT #undef _WIN32_WINNT #endif #define _WIN32_WINNT 0x0501 #ifdef…
在Win7 x64下安装最新版的PostgreSQL 9.x 后,从其官网下载最新的 ODBC驱动,分为普通的32位和64位版本,正常安装后,从已安装软件列表里可以看到两个版本的驱动都已经正确显示出来.但是在管理工具下ODBC数据源界面里只能选择64位的PostgreSQL驱动,32位竟然没有.如此一来,一些32位的应用软件就没法利用ODBC链接到数据库了(尝试选取地话,会报告选取的数据源(64位)和应用程序的系统构架(32位)不一致而失败). 一开始以为在ODBC数据源无法选择32位驱动是和安…
WebAPI项目中遇到了需要调用32位C++的dll的情况,调试的时候能正常调用,但是发布了之后部署在IIS中出现了BadFormatImage异常, 解决方法是在IIS中相应应用程序池=>高级设置=>启用32位 应用程序,如果还不能解决可以将dll拷贝到C:\Windows\SysWOW64目录下试试. 项目属性=>生成=>目标平台=>x86…
32位dbg中编辑的: 7711E9D3 | 6A | | 7711E9D5 | E8 | 7711E9DA | | | 7711E9DE | CB | ret far | 6A E8 CB 64位dbg中获取的: :B8 | | | push rax | : | push r8 | : | push r9 | : | push r10 | : | push r11 | : | push r12 | : | push r13 | : | push r14 | r14:"minkernel\\nt…
如果说你编译的exe运行时报错: “尝试读取或写入受保护的内存.这通常指示其他内存已损坏” 这很有可能是你是以非托管的方式错误地引用了64位的API中去. 为什么会这样? 那你就要考虑VS的编译器选项 /platform VS编译目标platform有这样的3个选项:AnyCPU,x86和x64. 如果一个程序被编译成AnyCPU,那么程序将包含2套相同逻辑的程序,一套在32位系统上用,另一套在64位系统上用.问题的原因就在这里. 如果你是在32位系统上用AnyCPU编译了代码,那么代码调用的时…