jjzjj

disassembly

全部标签

performance - 为什么 "MOVQ 0x30(SP), DX"慢?

请看下面的pprofsession。在treesort.add的第42行中,有一个int比较。我认为它占所有cpu时间的64%。在disasm中,操作是“MOVQ0x30(SP),DX”。为什么这么慢?File:treesort_bench.test.exeType:cpuTime:Sep7,2018at3:15pm(EDT)Duration:2.60s,Totalsamples=2.43s(93.44%)Enteringinteractivemode(type"help"forcommands,"o"foroptions)(pprof)top10Showingnodesaccount

c++ - 是否可以根据反汇编推断source中哪一行有问题?

017D0B5F调用eax时存在问题:017D0B56movesi,esp017D0B58movedx,dwordptr[ebp-20h]017D0B5Bpushedx017D0B5Cmoveax,dwordptr[ecx+8]017D0B5Fcalleax017D0B61cmpesi,esp017D0B63call@ILT+2525(__RTC_CheckEsp)(17C49E2h)017D0B68cmpdwordptr[ebp-2Ch],0017D0B6CjeCSourceStream::DoBufferProcessingLoop+10Ah(17D0B8Ah)017D0B6Emo

c++ - 如何使用 C++ 中的源代码扩展 .lib?

现在我的问题需要一个.lib并且我已经获取了该库的所有源代码,我怎样才能用它的源代码替换.lib依赖项以便我可以直接在源代码级别跟踪而不是反汇编吗? 最佳答案 如果您编译包含调试信息的.lib文件的源文件,那么您可以继续将.lib文件链接到您的可执行文件中,调试器将知道如何找到源文件。您目前可能正在使用一个没有调试信息的.lib文件,因此调试器将不支持该代码的源代码级调试。 关于c++-如何使用C++中的源代码扩展.lib?,我们在StackOverflow上找到一个类似的问题:

Windows PE - 如果不在资源中,字符串存储在哪里以及如何存储?

通常.exe文件中的字符串(如对话框的内容/标题)存储在某种资源中。但在我反汇编/资源检查的一些最近的exe中,我找不到任何包含该字符串的资源,但它以某种方式用db硬编码到程序源代码中。如何提取和修改直接位于程序中的字符串?我假设它们等同于C++中的constchar*?为什么有人不“外包”对话框、菜单等内容? 最佳答案 到目前为止,从PE中获取字符串的最简单方法是strings实用程序,它是我遇到的每个Linux发行版(甚至是uCLinux)的标准配置。它几乎只是遍历整个二进制文件,寻找一系列以null结尾、可打印的ascii字符

windows - PE文件中没有.BSS

这是简短的控制台应用程序示例staticcharbuffer[4096];intmain(){for(inti=0;i据我了解,编译器生成的“exe”文件应包含用于存储“buffer”变量的.bss部分。我正在使用TinyC编译器,生成的文件不包含对.bss的任何引用。DOSHeaderMagicnumber:0x5a4d(MZ)Bytesinlastpage:144Pagesinfile:3Relocations:0Sizeofheaderinparagraphs:4Minimumextraparagraphs:0Maximumextraparagraphs:65535Initial

c++ - 使用 IDebugControl::Disassemble 查看子程序的指令

所以我正在尝试使用WindowsAPI(DbgEng.h/.lib)“反汇编”函数来查看模块中某个函数(我知道它已导出)的指令。但是....它返回了一个意外错误。IDebugClient*clt;IDebugControl*ctrl;voidInitializeInterfaces(void){HRESULTstatus;if((status=DebugCreate(__uuidof(IDebugClient),(void**)&clt))!=S_OK){Utils::add_log("IDebugClientDebugCreatefailed:0x%X\n",status);}clt

windows - 如何在 x64 VC++ 编译器上禁用 FPO 优化

最近我开始使用Windbg(x64),为了玩它,我编译了(x64)一个示例程序使用cl.exels.c/Zi/Od/GS-有趣的是,为可执行文件生成的函数包含FPO优化。下面是一个例程的反汇编片段。0:000>ufls!GetDateStringls!GetDateString:00007ff7`459a6d00movqwordptr[rsp+8],rcx00007ff7`459a6d05subrsp,88h00007ff7`459a6d0cmovqwordptr[rsp+58h],000007ff7`459a6d15movqwordptr[rsp+50h],000007ff7`459

windows - 如何将 EXE 中的文件偏移量映射到其 PE 部分

我打开了一个我用ImageHlp.dll编写的程序来尝试一下,我注意到文件中似乎有很大的空白。据我了解,对于每个PE部分,部分标题将其在文件中的偏移量指定为PhysicalAddress,并将其大小指定为SizeOfRawData,因此所有内容均来自PhysicalAddress到PhysicalAddress+SizeOfRawData应该是那个部分。但是有大量EXE文件没有包含在这些范围内,所以我一定遗漏了一些东西。我知道我可以使用ImageRVAToSection并给它一个RVA地址来找出RVA位于哪个部分。有什么方法可以对文件偏移量做类似的事情吗?我怎样才能找出哪个PE部分字节

windows - 如何从 PE 文件的 .text 段中的数据中消除指令歧义?

我有一个PE文件,我尝试反汇编它以获取它的说明。但是我注意到.text段不仅包含指令,还包含一些数据(我使用IDA注意到这一点)。这是示例:.text:004037E4jmpds:__CxxFrameHandler3.text:004037EA;[00000006BYTES:COLLAPSEDFUNCTION_CxxThrowException.PRESSKEYPAD"+"TOEXPAND].text:004037F0;.text:004037F0movecx,[ebp-10h].text:004037F3jmpds:??1exception@std@@UAE@XZ;std::exce

windows - 如何从调用导入地址表中找出函数名?

我反汇编了advapi32.dll中的一个函数(特别是RegOpenKeyEx)。我看到两个FF15调用IAT:calldword[0x77dd13ec]和calldword[0x77dd15d4]使用dumpbin我转储了DLL的导入,它说导入地址表从77DD124C开始。但是0x77dd13ec没有出现在日志中。1A0的相对地址也没有出现在其中的任何位置。显然,那里显示的地址与IAT中的地址完全无关。是否可以在不编写和运行实际调用API的测试程序的情况下知道这些调用点链接到哪些函数?有什么方法可以查出来?我相信链接器生成了这些CALL指令,这些指令必须知道它链接到哪个函数。