出于研究目的,我试图在Windows系统调用中找到特定模式。到目前为止,我一直在研究Windowsdll,例如ntdll.dll、user32.dll等,但它们似乎只包含准备跳转到系统调用的包装代码.例如:moveax,101Ehleaedx,[esp+arg_0]movecx,0calllargedwordptrfs:0C0hretn10h我猜calllargedwordptrfs:0C0h指令是链中的另一个网关,它最终通向实际的程序集,但我想知道我是否可以直接到达该程序集。 最佳答案 您正在查找错误的dll。系统调用在ntosk
这是关于Windows内核驱动程序和内存管理的。我真的很好奇是否有一个函数(或者任何不方便的方法)来获取(或迭代)特定池标签的所有内存分配?这些是使用ExAllocatePoolWithTag(type,size,tag)...有使用特定池标签的内核函数,现在我需要找到使用该标签进行的所有分配?我比较确定这是不可能的(出于安全原因),但仍需要对此进行确认。干杯,将更新:(关于下面的WinDbg评论)kd>!poolfindObFlScanninglargepoolallocationtableforTag:ObFl(fffffa8002290000:fffffa8002350000)S
我正在编写一个Windows应用程序,它在汇编中打印命令行参数。我有所有的处理代码。我需要知道的是程序参数在堆栈中的位置 最佳答案 命令行参数并没有真正在堆栈上传递。获取命令行指针的官方方法是调用KERNEL32函数GetCommandLine。 关于windows-x86程序参数位置,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/10401423/
为了集成两个应用程序,我使用VisualStudio2010开发了一个Windows服务应用程序。在我的WinService中,我调用目标应用程序开发人员提供的一些APIDLL文件,以便在从源应用程序获取信息后在目标应用程序中创建一些信息。所以我的Windows服务就像一些中间件应用程序一样工作。当我运行该服务时,出现以下错误:System.BadImageFormatException:Couldnotloadfileorassembly'Interop.ErpBS800,Version=8.5.0.0,Culture=neutral,PublicKeyToken=e076e239d
我是汇编的新手,我正在尝试编写一个计数达到10,000并退出的程序。我正在使用fasm`include'include/win32ax.inc'.dataincharDB?numwrittenDD?numreadDD?outhandleDD?inhandleDD?strFormatDB"Number%d",0strBuffRB64.codestart:;setupconsoleinvokeAllocConsoleinvokeGetStdHandle,STD_OUTPUT_HANDLEmov[outhandle],eaxinvokeGetStdHandle,STD_INPUT_HANDL
我正在使用Windbg在Windows(x64)内核上做一些反向操作。我尝试确定由以下字节表示的结构:0e00100000000000-90dbfedb12000000我认为:90dbfedb12000000是一个指向字符串的指针kd>d12dbfedb9000000012`dcec721063006f0075006e-0074007200790000c.o.u.n.t.r.y.0e00是字符串的大小1000是带有终止空字节的字符串的大小所以我认为原始结构如下所示:typedefstruct_SSTR{WORDwStringLen;WORDwStringWithNullCharLen;
既然函数的调用约定规定了保留哪些寄存器,那么寄存器可以用作循环计数器吗?我一开始以为ecx寄存器是用来做循环计数器的,后来发现我用的一个stdcall函数并没有保留的值>ecx,我不这么认为。是否有保证(至少通过大多数使用的调用约定)被保留的寄存器?注意:我对使用堆栈变量作为循环计数器没有问题,我只是想确保这是唯一的方法。 最佳答案 您可以使用任何通用寄存器,偶尔也可以使用其他寄存器作为循环计数器(当然不是堆栈指针☺)。要么你使用一个手动循环,即替换...looplabel……与……decebpjnzlabel...无论如何都更快(
我一直试图在汇编程序中与Windows中的标准C库进行交互,但遇到了麻烦。出于某种原因,我无法让printf接受浮点变量,所以这里出了点问题。这是我能创建的最短的演示问题的程序。我已经包含了解释我对应该发生的事情的理解的评论。谢谢;;Hello64.asm;Asimpleprogramtoprintafloatingpointnumberinwindows;;assemble:nasmfloat64.asm-fwin64;link:golink/console/entrymainfloat64.objMSVCRT.dll;;tellassemblertogenerate64-bitco
问题当我使用as(binutils)编译我的汇编代码并使用link.exe(VisualStudio2015)进行链接时,程序因地址未重定位而崩溃。当与gcc(gcchello-64-gas.obj-ohello-64-gas.exe)链接时,程序可以正常运行而不会崩溃。我是否正确地假设as生成的目标文件应该是独立于编译器的,因为abi兼容性问题在汇编代码编写者手中?由于我是初学者,因此感谢任何对我的错误/不正确假设的解释。平台Windows10,64位链接器:VisualStudio2015使用native命令工具命令提示符(x64)编译器:as来自MinGW-w64例子以下代码没有
这是我的第一篇文章,我是汇编和调试的新手,所以请多多包涵。我试图将一些代码(对MessageBoxA的一点调用)注入(inject)到Windows7记事本可执行文件中。但是,我遇到了地址问题。首先,我在OllyDbg中打开exe,然后找到包含“notepad.pdb”的ASCII文本的行。然后我在下面放了一个ASCII字符串(例如,“INJECTEDNOTEPAD”)。接下来,在其下方,我输入了这个asm代码:PUSH0PUSHaddress_of_ASCII_string;Inthiscase,00A6B668CPUSHaddress_of_ASCII_string;Inthi