jjzjj

windows - 实现 x86 到 x64 汇编代码切换

我正在研究NtDll如何在x86进程中工作,并且我使用IDAPRO调试了函数NtCreateFile。它的代码如下:moveax,55h;NtCreateFilemovedx,offset_Wow64SystemServiceCall@0;calledx;Wow64SystemServiceCall();retn2ChWow64SystemServiceCall():movedx,largefs:30hmovedx,[edx+464h]testedx,2jzshortloc_7738B5C8int2Eh;DOS2+internal-EXECUTECOMMAND;DS:SI->count

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

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

c++ - 为什么进程会在 RtlExitUserProcess/LdrpDrainWorkQueue 中挂起?

为了调试锁定文件问题,我们从.NET进程调用SysInternal的Handle64.exe4.11(通过具有异步输出重定向的Process.Start)。调用进程在Process.WaitForExit挂起,因为Handle64进程没有退出(超过两个小时)。我们转储了相应的Handle64进程,并在VisualStudio2017调试器中对其进行了检查。它显示了两个线程(“主线程”和“ntdll.dll!TppWorkerThread”)。主线程的调用栈:ntdll.dll!NtWaitForSingleObject()Unknownntdll.dll!LdrpDrainWorkQu

c - 读取 ntdll.dll + offset 导致访问冲突

我试图逐字节读取加载到我的可执行文件中的ntdll.dll的内存。该可执行文件在我的x64windows7机器上编译为x32可执行文件。我编写了一个名为FindPattern的函数,它接收一个特定的字节数组,并在ntdll.dll模块中查找这个字节数组。我已经在其他模块上检查过这个功能,我确信它工作正常。现在当我在我的ntdll模块上使用这个函数时,它在读取内存ntdll+0x1000时崩溃。我在windbg上检查过这个,windbg也不能读取内存:0:000>dbntdll+FF0L2077df0ff00000000000000000-0000000000000000........

windows - ntdll_77bc0000 或 ntdll_772d0000 在 Wow64 调用堆栈中意味着什么

我有WOW64崩溃转储,其中包含调用堆栈信息,例如:0018fb0077c06a8b0018fbc80018ffc40018fc18ntdll_77bc0000!ExecuteHandler2+0x26或喜欢:0018fb0077c06a8b0018fbc80018ffc40018fc18ntdll_772d0000!ExecuteHandler2+0x26ntdll_772d0000好像是一个dll的名字,但是我在C:\Windows\SysWOW64中没有看到,我也很好奇为什么在同一台机器上会有不同的名字,比如ntdll_77bc0000和ntdll_772d0000。谢谢。

c - 是否有来自低级库(如 kernel32.dll 或 ntdll.dll)的 wsprintf() 类型函数?

我正在编写一个低级记录器函数,它将文本字符串附加到文本(日志)文件的末尾。要求是此函数不应调用来自DLL的任何WinAPI,这些DLL可能尚不可用于该进程——例如当它从DllMain调用时处理程序。换句话说,它不能使用除了保证加载到任何用户模式进程中的库之外的任何库,即kernel32.dll或ntdll.dll.我可以通过CreateFile、WriteFile、CloseHandle、HeapAlloc、HeapFree等均来自kernel32.dll。问题在于格式化输出字符串。例如,我需要添加一些额外的(自动生成的)详细信息,例如当前时间、进程ID、sessionID等。我通常会

c++ - 我可以直接访问 Windows 内核系统调用吗?

我一直在研究Windows内部结构,最近才了解系统调用,我想知道是否可以像函数一样使用这些系统调用?我知道它们并不是真的要从外部访问。例如:NtUserEmptyClipboard是Win32k.sys中的一个系统调用,它的地址是0x117f如果我想像函数一样使用这个调用,我该怎么做呢? 最佳答案 你想做什么在很大程度上取决于你感兴趣的架构,但要知道的是,ntdll.dll是每个系统调用的用户模式蹦床-即唯一的一个在一天结束时实际进行系统调用的是ntdll。因此,让我们通过打开任何旧的exe(我选择记事本)在WinDbg中反汇编这些

windows - 如何知道 80000003 断点后面是否隐藏了不同的异常(WER 对话框)

我的应用程序(一个可执行文件)在远程机器上崩溃了。我无权访问该机器,因此我请求了一个通过任务管理器生成的转储。使用WinDbg,在执行命令!analyze-v时,我可以在许多其他内容中看到以下文本EXCEPTION_RECORD:(.exr-1)ExceptionAddress:0000000000000000ExceptionCode:80000003(Breakinstructionexception)ExceptionFlags:00000000NumberParameters:0我怎么知道它是否是导致崩溃的原因?如果不是,我如何确定真正的原因? 最佳

c - NtDll是否真的导出C运行时函数,并且可以在我的应用程序中使用它们吗?

我在Windows10计算机上查看了NtDll导出表,发现它导出了标准的C运行时函数,例如memcpy,sprintf,strlen等。这是否意味着我可以在运行时通过LoadLibrary和GetProcAddress动态调用它们?是否可以保证每个Windows版本都适用?如果是这样,可以完全删除C运行时库(仅使用NtDll中的CRT函数),从而使我的程序更小? 最佳答案 绝对没有理由调用这些由NtDll导出的未记录的函数。Windows将所有必需的C运行时函数导出为标准系统库(即Kernel32)中记录的包装器。如果您绝对不能链接

windows - 是否可以在 windbg 调试 session 中将缺失的符号添加到公共(public)符号?

我试图在windbg中使用“dt”命令查看IMAGE_DOS_HEADER结构:0:001>dtntdll!IMAGE_DOS_HEADER**Symbolntdll!IMAGE_DOS_HEADERnotfound**我搜索了一下,发现其他人已经可以做到这一点:MSDNBlogs>Junyoung'sBlog>PortableExecutableFileFormatonMemoryDump0:000>dtIMAGE_DOS_HEADER77c00000ntdll!IMAGE_DOS_HEADER+0x000e_magic:0x5a4d?MZ+0x002e_cblp:0x90+0x00