草庐IT

Assembly

全部标签

windows - 为 Windows x86 编写程序集

我想使用x86程序集为Windows编写简单的程序(控制台输入/输出),主要是因为我只是好奇。如果有人能指出我正确的方向,那就太好了。我已经对一些更简单的x86指令、寄存器的功能等有了相当好的理解,但程序如何与操作系统接口(interface)以及如何使用标准输入和输出对我来说仍然是个谜。我知道这些事情与advapi32.dll和kernel32.dll等库有关,并且有相关的静态库.lib文件使编译器能够使用这些动态链接库,但除此之外我不知道这是怎么回事发生。我什至不清楚C等语言中的头文件如何使用.lib文件。 最佳答案 也许最简单

windows - 服务无法启动 : can't load assembly

我正在尝试将托管WCF服务的Windows服务放在一起。我的项目结构如下:服务服务.契约(Contract)服务.主机服务.设置Service.Host项目包含ProjectInstaller,Service.Setup项目包含WindowsInstaller。现在,一切构建和安装都很好,但是当我尝试启动该服务时,它立即停止运行,并在我的事件日志中显示以下消息:Servicecannotbestarted.System.TypeLoadException:Couldnotloadtype'Service'fromassembly'Service,Version=1.0.0.0,Cult

windows - 为什么 Windows x64 调用约定不使用 XMM 寄存器来传递超过 4 个整数参数?

(微软)x64callingconvention状态:TheargumentsarepassedinregistersRCX,RDX,R8,andR9.Iftheargumentsarefloat/double,theyarepassedinXMM0L,XMM1L,XMM2L,andXMM3L.这很好,但为什么只是float/加倍?为什么整数(可能还有指针)不也通过XMM寄存器传递?似乎有点浪费可用空间,不是吗? 最佳答案 因为大多数对非FP值(即整数和地址)的操作都设计为使用通用寄存器。有整数SSE运算,但它们只是算术运算。因此,

windows - 对 Win32 API 调用在汇编中的工作方式感到困惑

我不知道如何更好地提出这个问题,但为什么会这样:callExitProcess做同样的事情吗?moveax,ExitProcessmoveax,[eax]calleax我认为这些是等价的:callExitProcessmoveax,ExitProcesscalleax 最佳答案 从DLL导入代码时,符号ExitProcess实际上不是退出进程的代码地址(它是地址的地址)。因此,在那种情况下,您必须取消引用它才能获得实际的代码地址。这意味着您必须使用:call[ExitProcess]调用它。例如,thislocation处有一些代码

windows - 从文本创建 COM 文件

提供的答案here是一个非常棒的技巧。只是为了我自己的启蒙,我想学习创建那种类型的程序。是否有一个很好的库可以用来确保我的输出完全是ASCII?或者我将开始使用什么工具来生成这种类型的输出?我知道我可能会创建16位应用程序,但我也可以生成32位应用程序吗?我发现MSFT的debug.exe程序有一个汇编程序可以处理它,但我从中收到的输出并不完全是ASCII。此外,在反汇编谢继雷'Lenik的回答中提供的程序时,我看不到他在哪里调用int21来写入屏幕。是否有关于此类程序的更多文档?有谁能帮我解开这些谜团吗? 最佳答案 text-to

c++ - 如何取消引用函数指针并在 MSVC++ 下读取为数据?

下面是我尝试读取函数指针指向的机器码并打印它。目前,正在打印的数据与生成的代码不同......我已经检查了在生成的可执行文件中创建的指针的值并由反汇编程序列出(代码/调试器之间存在差异)但是不要没有看到任何太麻烦的事情,或者了解我如何解决这个问题。voiddummy();int_tmain(intargc,_TCHAR*argv[]){inti;printf("\nReadingdummy...\n");for(i=0;i 最佳答案 这里有两个常见的错误。首先,转换为unsignedchar*而不是char*。接下来,重要的是,项目

windows - NASM 程序集 - 这个变量后面的 ", 0"是做什么用的?

就在我按照指南在汇编中使用MessageBoxA函数之前,在创建变量时,他们在变量内容后使用了“,0”。这是做什么用的?代码如下所示:paramTextdb"thisistext",0 最佳答案 它实际上是字节零,很可能是为了创建一个null-terminatedstring. 关于windows-NASM程序集-这个变量后面的",0"是做什么用的?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/q

c++ - 带有/SAFESEH 的自定义 SEH 处理程序

我目前正在尝试用C++创建一个编译器,它可以在运行时生成机器代码。但是,我目前正在尝试启用安全异常处理(使用/SAFESEH进行编译)。我的自定义异常处理程序在Debug模式下工作,但是当我在Release模式下运行相同的代码时,我的进程就终止了。我很确定问题是我未能像这样注册我的自定义异常处理程序,因为当我使用/SAFESEH:NO编译我的代码时,即使在Release模式下一切正常。我的自定义异常处理程序是用我的其他C++代码编写的,我试图通过向我的项目添加一个.asm文件来将其注册为异常处理程序,内容如下:.386.modelflat_MyExceptionHandler@16pr

c - 如何将反汇编的C代码划分为函数?

我有一个创建win32进程的.text段转储的应用程序。然后它在基本block上划分代码。基本block是一组总是一个接一个地执行的指令(跳转总是这些基本block的最后一条指令)。这是一个例子:Basicblock1movecx,dwordptr[ecx]testecx,ecxje00401013hBasicblock2moveax,dwordptr[ecx]calldwordptr[eax+08h]Basicblock3testeax,eaxje0040100AhBasicblock4movedx,dwordptr[eax]push00000001hmovecx,eaxcalldw

windows - 在 DLL 中,函数表的结构是怎样的?

我一直在研究不明确支持我的操作系统的设备库的实现。特别是,我有一个反汇编的DLL,以及相当多的支持源代码。那么,函数表/导出表的结构是怎样的呢?我的理解是.data部分的第一个结构是RVA表。接下来是通过索引链接到第一个地址表的字符串表。这对我来说很有意义,因为链接器可以在符号和地址之间进行转换。序数引用的函数如何适应这张图?如何知道哪个函数有这样那样的序号,链接器如何解决这个问题?换句话说,假设其他一些DLL导入了SOME_LIBRARY_ordinal_7,链接器如何知道要使用哪个函数?谢谢大家!编辑更多信息...我正在使用FTDI库,并且想解决正在调用的函数。特别是,我看到类似这