草庐IT

ASSEMBLY

全部标签

c# - 打开 C :\windows\assembly\gac_msil from C#

如何使用C#在Windows资源管理器窗口中打开C:\windows\assembly\gac_msil?说明:当我在开发环境中将程序集部署到GAC时,我喜欢将.pdb符号文件部署到与位于C:\Windows\assembly\GAC_MSIL\AssemblyName\Version__PublicKeyToken的程序集相同的目录\。这样,如果我想附加VisualStudio调试器,它会自动找到符号文件。我构建了一个小实用程序来检测何时将我的一个程序集添加到GAC,并且我希望它显示一个按钮,为我弹出打开目录的按钮。我有按钮和路径,但启动一个使用路径启动explorer.exe的进程

windows - 如何在DOS下显示汇编中的字符?

我有以下代码,我试图在其中显示,但我的调试器(AFD)继续调试但不显示任何内容。[org0x100]movax,0xb800moves,axmovdi,0nextchar:movword[es:di],0x0720adddi,2cmpdi,40jnenextcharmovax,0x0003;80x25textmode,16colorsint0x10 最佳答案 通过在退出前等待键盘按键,给自己一个机会来实际查看输出的内容:[org0x100]movax,0xb800moves,axmovdi,0nextchar:movword[es:

windows - 如何在 Windows 10 专业版 64 位上将二进制文件刻录到通过软盘 USB 插入的软盘的扇区 0

大家好,我正在用Assembly16位NASMwindows1064位(具体而言)编写一个操作系统,并将其编译为2个二进制.bin文件:内核.bin启动.bin正如您可能猜到的那样,boot.bin会加载kernel.bin并创建一个文件系统,这样就没问题了。但问题是我需要在真机上测试它以测试硬件如何react而不仅仅是虚拟的!所以我得到了软盘(3.5"1.44MB),这已经足够了,但我试图将引导加载程序(boot.bin)写入带有软盘USB驱动器的软盘的扇区0(驱动器和软盘正常工作!)我使用以下步骤在cmd中将操作系统放在软盘上:formatA:nasm-fbinkernel.asm

c - 入口点在正确的地方吗?

这几天在看一些PE可执行规范。然后我制作了一个小C程序,执行pushebp,popebp并编译了它。成功编译后,我在可执行文件中打开PE文件,查看位置PE_magic+PE_header_size+PE_OPTHDR_entrypoint,其中PEmagic是文件中第一次出现“PE”字符串,根据PE&,PE_header_size为24,PE_OPTHDR为16COFF规范。在那个位置我找到了地址0x1000,但是我的文件的长度只有0x600。那么我是在正确的位置,还是入口点(顺便说一句,在0x200上)地址设置不正确?我包括我的文件内容和我的代码的图像。代码(在项目属性中我没有检查标

windows - 试图找出 MASM 语法

我已经在Linux上完成了一些汇编编程,现在正尝试使用MASM在Windows上完成。不过,我遇到了几个问题。(我在这里尝试实现strlen()函数。我知道函数逻辑/指令不是最优的,但我只是想弄脏一些东西,这样我就可以继续实现其他C库函数.).386.modelflat,stdcalloptioncasemap:noneinclude\masm32\include\kernel32.incincludelib\masm32\lib\kernel32.libinclude\masm32\include\masm32.incincludelib\masm32\lib\masm32.lib.

c++ - 如何读取 Visual C++ 2010 生成的程序集输出?

我有以下C++代码:intmain(){inti;intj;i=1111;j=2222;return0;}我想查看此C++代码编译成什么样的汇编代码,所以我选择了以下选项:此选项将输出每个C++语句并直接在它下面输出它对应的汇编指令。但是有一些C++语句不对应任何汇编指令(例如:inti;)。所以我想确保在阅读生成的汇编代码时我的以下假设是正确的: 最佳答案 inti;intj;只是变量声明..它们甚至没有用声明初始化,因此从这个意义上说,这两行没有明确的汇编指令..但请注意局部变量声明确实导致在堆栈上分配这些局部变量。是的,对于您

c - 如何在 Windows 7 X64 SP1(x64 模式)下执行直接系统调用?

我试图模拟syscall指令在Windows7X64(SP1)上的工作方式,因此我使用MinGW64编写了一个64位GCC示例。据我所知,对于Windows,所有系统调用入口点都在ntdll.dll或ntdll32.dll中(在这种情况下,我们只关心ntdll.dll)。Status=NtCreateFile(&FileHandle,//returnedfilehandle(GENERIC_WRITE|SYNCHRONIZE),//desiredaccess&ObjectAttributes,//ptrtoobjectattributes&Iosb,//ptrtoI/Ostatusbl

C++ 中间函数 Hook : get register values and jump back [x86 assembly on windows]

在寄存器EBP中有一个int值,在EBX中有一个字符串。我需要在我自己的函数中从这些寄存器中获取值,对它们进行一些操作,最后跳回下面的一些代码。我在0x46AA17处对名为JmpHook的函数执行了一个JMP。voidJmpHook(){char*mystring;_asmmovmystring,ebxprintf("value:%s",mystring);_asm{jmp[0x46AA87]}}如您所见,我正在尝试将EBX处的字符串移动到mystring中,最后跳回0x46AA87,这是位于我的JMPJmpHook下方的几行。printf被调用并且mystring被输出,但所有这些在

windows - 如何将 .asm 文件汇编并链接到 Win32 可执行文件?

我的系统上安装了NASM和Dev-Cpp。Dev-cpp随LD(GNU链接器)一起提供。我不熟悉汇编代码和从汇编文件创建32位Windows可执行文件的过程。我试过使用这个:nasm-fwin32ass.asmnasm-oassass.o我没有成功使用这些命令来创建可执行文件。汇编(使用NASM)和链接以生成将在32位Windows上运行的可执行文件的正确方法是什么? 最佳答案 您的一条评论(似乎已不复存在)确实提到您在Windows上安装了Dev-Cpp。如果您的路径上有Dev-CppMinGWbin目录,则GNU链接器LD可供您

c - x86-64下的快速堆栈切换

在x86-64下切换堆栈的最少代码是多少?我正在尝试在没有getcontext或setjmp+内联汇编的情况下在Windows和Linux下实现纤程。它真的像交换$rsp和$rbp一样简单吗?因为我可以轻松做到。我只是不知道该怎么做。我对我的x86-64知识生疏了。 最佳答案 将RSP更改为指向不同的堆栈必须作为上下文切换的一部分来完成,上下文切换会保存旧线程/纤程中的所有寄存器并从新寄存器加载已保存的架构状态。不仅是RBP,还有所有RAX-RDI和R8-R15,以及RIP(通过jmp或ret)。我认为还有所有其他调用保留的架构状态