我正在学习x86asm并使用masm,并且正在尝试编写一个与以下c函数具有等效签名的函数:voidfunc(doublea[],doubleb[],doublec[],intlen);我不确定如何实现它?asm文件会被编译成win32DLL。为了让我明白如何做到这一点,有人可以帮我把这个非常简单的函数翻译成asm吗:voidfunc(doublea[],doubleb[],doublec[],intlen){//a,b,andchavethesamelength,givenbylenfor(inti=0;i我尝试用C语言编写一个这样的函数,编译它,然后使用OllyDbg查看exe中相应
我有一个从asp.net1.1(VS2003)迁移到Asp.net2(VS2008)的Web应用程序。我在新版本上执行Oracleconnexion时遇到问题。开发环境是64位七。当使用所有CPU生成应用程序时,我在System.Data.OracleClient上遇到问题,异常System.BadImageFormatException:Tentativedechargementd'unprogramdeformatincorrect.(HRESULT异常:0x8007000B)。.我在x86CPU上生成,但在启动时出现此错误:[BadImageFormatException:Imp
我用DUMPBIN转储了一个WindowsSDK.lib文件(kernel32.lib),输出显示每个API名称都有两个“版本”,例如:_imp_ExitProcess@4和_ExitProcess@4那么,为什么会有两个相同但名称不同的重整?.假设我想从NASM调用ExitProcess,当声明EXTERN时我应该使用它们中的哪一个?我的实践告诉我,我可以调用它们中的任何一个,但我不知道哪个是“正确的”或“首选的”坚持下去。 最佳答案 我认为_imp_版本旨在与VisualC++编译器上的__declspec(dllimport)
我一直在做一些研究,但我只是找到了越来越多的方法来做我想做的事,而我一个都不懂。我需要将什么代码组装成.exe才能将5返回到命令行?我想要一个exe,在调用时打印5。研究:printf"5",0它需要链接2个库,我想保持简单。moveebx,5;ormoveax,5ret为什么会打印5?这会加载一个值为5的寄存器并返回。没有别的。谁能给我解释一下这些返回5的方式之间的区别?什么最适合非常简单的WindowsEXE可执行文件?我无法在StackOverflow中已经提出的问题中得到答案。注意,我使用:Win7、WinAsam、MASM谢谢! 最佳答案
我想编写类似于以下C++程序的MASM程序:#include#includetypedefUINT(_stdcall*FuncPtr)(LPCSTRlpCmdLine,UINTuCmdShow);intmain(void){HMODULEhDll=LoadLibrary(TEXT("Kernel32.dll"));FuncPtrfunc_addr=reinterpret_cast(GetProcAddress(hDll,"WinExec"));(*func_addr)("C:\\WINDOWS\\system32\\calc.exe",SW_SHOWDEFAULT);FreeLibra
我试图用tasm编译一个名为addTwoNumbers.asm的文件,但收到错误“命令行:找不到文件:addTwoNumbers.asm”。在我将文件的名称更改为更短的名称(如add.asm)后,它编译没有任何错误,为什么? 最佳答案 因为TASM(即使是最后一个版本)是一个非常古老的DOS程序,不支持WindowsLFN/VFAT/(随心所欲)。它只接受普通的旧DOS8.3文件名。一个选择是将TASMADDTWO~1.ASM(假设您没有其他名称以AddTwo开头的文件)作为文件名。另一个-放弃长文件名。第三种-使用更新的东西,可能
我正在维护一个使用VS6.0构建的遗留应用程序,但现在它已移至VS2005,在编译过程中它会创建大量.COD文件,我发现这个“程序集、机器代码和源代码(/FAcs)”编译器switch对此负责。谁能告诉我这些.COD文件有什么用,如何使用?这对故障转储分析有什么作用吗?谢谢汤姆 最佳答案 一般来说,它们用于检查编译器生成的代码。您可能想要这样做的原因有多种。有时您想查看代码的优化程度。有时您的代码没有按照您期望的方式运行,您想要查看它是您自己的代码中的错误还是编译器中的错误。您可以在故障转储分析中使用.COD文件,但几乎只能作为最后
我正在Windows上编写一个NASM汇编程序,让用户输入两个单位数字,将它们相加,然后输出结果。我正在尝试使用WindowsAPI进行输入和输出。不幸的是,虽然我可以让它在程序循环后立即读取一个数字以获得第二个值,但程序结束而不是要求第二个值。程序的输出如下所示:有趣的是,如果我输入1,那么显示的值会大一个,所以它正在添加一些东西!这也适用于输入的其他个位数(2-9)。我很确定这与我使用ReadConsoleA函数的方式有关,但我在尝试寻找解决方案时遇到了一些障碍。我安装了gdb来调试程序,组装如下:nasm-fwin64-g-otask9.objtask9.asmGoLink/co
参见fullcodehere.我已经用fread调用填充了一个缓冲区(malloc'd)并且它是成功的。我现在正在尝试遍历缓冲区并开始解析输入。我试图通过遍历缓冲区并将每个字符输出到屏幕来开始非常简单。但是我的循环只是输出整个输入。这是代码的循环部分:movecx,0movebx,buffer.readByte:pushDWORD[ebx+1*ecx]pushDWORDecxpushDWORDcharcall_printfaddesp,12increcxcmpecx,[fsz]jge.endReadjmp.readByte读入(s1.txt)的源文件内容为:1+2;我的目标是简单地输出
所以我有一个汇编代码块,它初始化一个程序,解析kernel32,找到GetProcAddress,然后找到LoadLibarayA来加载User32.dll。它工作到LoadLibraryA为止。它在函数调用中崩溃,但我可以看到调试器中加载了User32.dll。如果我尝试在不同的模块(例如Kernel32.dll)上使用LoadLibraryA,它会返回并成功。如果你想看的话,这里有完整的源代码https://gist.github.com/mojobojo/921a5af897e86bb940a2Exceptionthrownat0x00007FFAFAE8E91C(ntdll.d