草庐IT

windows - exe数据段中的数据

我将以下四行代码编译成一个名为foo.exe的文件,希望全局变量'i'的值(即9)进入foo.exe的数据部分inti=9;intmain(){}然后我使用下面的代码来查明它是否真的在foo.exe的.data部分,但没有找到任何东西..有人能解释一下哪里出了问题吗..??#include#include#include#includeintmain(){HANDLEhFile;HANDLEhFileMapping;LPVOIDlpFileBase;PIMAGE_DOS_HEADERdosHeader;hFile=CreateFile(TEXT("foo.exe"),GENERIC_R

c++ - 这段代码是一个有效的临界区包装类吗

我实际上有2个问题,这是第一个。使用我在两个不同站点找到的代码,我编写了这两个关键部分包装器类。它会起作用吗?#ifndefCRITICALSECTION_H#defineCRITICALSECTION_H#include"windows.h"classCriticalSection{longm_nLockCount;longm_nThreadId;typedefCRITICAL_SECTIONcs;csm_tCS;public:CriticalSection(){::InitializeCriticalSection(&m_tCS);m_nLockCount=0;m_nThreadI

windows - 代码段描述符中的 D 标志对 x86-64 指令有何作用?

当在x86-64代码中使用时,我试图了解代码段描述符中D标志的工作原理。它设置在代码段描述符的D/B位22中,如下图所示:英特尔文档(来自3.4.5SegmentDescriptors部分)陈述如下:D/B(defaultoperationsize/defaultstackpointersizeand/orupperbound)flagPerformsdifferentfunctionsdependingonwhetherthesegmentdescriptorisanexecutablecodesegment,anexpand-downdatasegment,orastacksegm

windows - 为什么这段汇编代码不打印栈顶?

成功制作“Hello,World!”后x86-64中的程序,我想要制作一个可以查看堆栈顶部的程序(无需弹出堆栈,并使用esp寄存器,这样我就可以了解它是如何工作的)。这是NASM中的程序:externGetStdHandle,WriteConsoleA,ExitProcesssection.bssdummyresd1section.text%macroprint3movrcx,%1movrdx,%2movr8,%3movr9,dummypushNULLcallWriteConsoleA%endmacro_start:movrcx,STD_OUTPUT_HANDLEcallGetStdH

windows - 这段汇编代码在做什么 - 写入进程内存

编辑/更新所以我认为让我感到困惑的是:LEAESI,[EBX+8*EAX+4]加载一个地址,但是:LEAESI,[EBX+4]加载内容(值?)而不是地址。这怎么不是取消引用?我也不知道是什么mov[eax+1],ecx是吗?原始问题我正在努力学习阅读汇编,但我开始挣扎了。抱歉,如果有拼写错误,我无法从我的实验室机器上复制。这是来自恶意代码,因此它可能不是最佳的。我想我在某处理解有缺陷,但我就是想不通。var_30=byteptr-30hleaeax,[ebp+esi+var_30]我的理解是,加载有效地址将成为从[basepointer-30h+esi]计算出的任何地址。我不知道esi

windows - 共享内存段中某个位置的原子比较和交换

我想了解使用InterlockedCompareExchange()是否存在任何隐藏问题更改使用CreateFileMapping(INVALID_HANDLE_VALUE创建的段中的内存)并在多个进程之间共享。换句话说,进程是否可以依赖CAS语义来操作它们共享的内存块?我想他们可以,只是想确认一下。谢谢 最佳答案 CAS操作将与该内存完美配合。文件映射API和虚拟内存系统完成了将内存映射到多个进程的所有艰巨工作。当您接触到内存时,您已经无法将它与任何其他内存区分开来。 关于window

windows - 如何在 IDA Pro 中获取 .text 段统计信息?

有什么方法可以显示IDAPro将.text段中的多少字节视为指令,将多少字节视为数据?是否还有其他统计数据(例如函数大小)? 最佳答案 函数大小显示在函数列表中。但是没有用于代码/数据字节计数的内置功能。您将需要使用脚本(IDC或Python),或使用IDASDK编写插件来计算它。我建议在Hex-Raysusersupportforum上发布此问题. 关于windows-如何在IDAPro中获取.text段统计信息?,我们在StackOverflow上找到一个类似的问题:

c++ - Windows:处理所有线程中的段错误

我正在寻找一种方法来捕获程序中任何地方的段错误和其他错误(它使用多个线程,其中一些是由外部库创建的)。我将VisualStudio2013与英特尔C++编译器2015结合使用。一些外部DLL-在某些情况下我什至在Windows驱动程序中看到过这种情况-可能包含我无法控制的错误,并且我的软件全天候运行24/7-我需要能够在某处记录崩溃并重新启动我的软件。到目前为止,我发现您可以设置一个信号处理程序来处理SIGSEGV和其他信号。根据我的阅读,在Linux下这将完全满足我的需要(为所有线程处理此信号),但在Windows下您需要分别为每个线程设置信号处理程序。因为我不是创建所有线程的人(如

c - 在 C 中调用函数时出现段错误

所以我正在构建一个虚拟机,并试图让它尽可能跨平台,突然遇到一个奇怪的错误。我的机器有一个let指令,它为机器内存中的一个变量分配内存,并为该变量赋值。简而言之,let函数调用getAddress来获取变量的地址。getAddress检查变量是否已定义,并返回地址。如果变量没有定义,getAddress调用memallocate为变量分配内存,并返回地址。这是函数的定义:staticuint16_tmemallocate(Machine*m,char*symbol){uint16_tallocationAddress=getFirstFree(*m);SymbolTable*newSym

windows - 2段相同代码中批处理脚本中延迟变量扩展的不同行为

@echooffpushdsetlocalenabledelayedexpansionenableextensionssetVARY=beforeif"!VARY!"=="before"(setVARY=2if"!VARY!"=="2"@echoIfyouseethis,yesecho!VARY!)setVAR=beforeif"!VAR!"=="before"(setVAR=1if"!VAR!"=="1"@echoIfyouseethis,itworked)popd预期输出:如果你看到这个,是的2如果你看到这个,它就成功了实际输出:如果你看到这个,它就成功了有人可以解释为什么输出也没