jjzjj

assembly

全部标签

c - 如何从 ml64.exe(MSVC 64 位 X64 汇编程序)访问线程本地存储?

以下C函数尝试使用线程局部存储变量以线程安全的方式防止多核代码中的递归。但是,由于有些复杂的原因,我需要在X64汇编程序(IntelX86/AMD64位)中编写此函数,并使用VC2010中的ml64.exe进行汇编。如果我使用全局变量,我知道如何执行此操作,但我不确定如何使用具有__declspec(thread)的TLS变量正确执行此操作。__declspec(thread)inttls_VAR=0;voidnorecurse(){if(0==tls_VAR){tls_VAR=1;DoWork();tls_VAR=0;}}注意:这是VC2010踢出来的功能。但是,MASM(ml64.

windows - Windows 上的 ARM 汇编语言 IDE

Windows上是否有任何ARM汇编语言IDE(如Eclipse,...),我可以编写我的指令并让它模拟这些指令?在其他平台上呢?我该如何详细使用它们? 最佳答案 AndroidSDK有一个适用于Windows的版本,其中包括EclipseIDE;它包括一个设备模拟器,您可以在其上运行创建的代码。如果添加AndroidNDK(native开发工具包),您还会获得ARM交叉编译器。Android模拟器/仿真器实际上是ARM的QEMU,它执行原生ARM代码。简而言之:获取AndroidSDK/NDK适用于Windows,您将拥有所需的一

Windows 命令提示符 - 'debug' 不是可识别的命令?

我已经对此进行了一些搜索,但令人惊讶的是找不到解决方案。我想要做的就是启动Windows命令提示符,并使用“调试”命令访问Debug模式。但是命令提示符一直响应:“调试”未被识别为内部或外部命令。根据之前的搜索,我只能得出与系统环境变量有关的结论,但没有足够的信心去改变它们。如有任何帮助,我们将不胜感激。 最佳答案 您使用的是x64版本的Windows吗?debug.com是一个16位程序,不随x64版本一起提供,因为它们不支持16位可执行文件。 关于Windows命令提示符-'debu

c - Windows 上的 gcc 生成垃圾? Windows 与 Linux

我想找出为什么在Windows中对同一程序的指令比在Linux中多得多。所以我只用了inta=0xbeef;和printf("test\n");在C中并在Linux和Windows中编译。当我调试和反汇编主机时,我得到了这个:在Linux上:0x080483e4:push%ebp0x080483e5:mov%esp,%ebp0x080483e7:and$0xfffffff0,%esp0x080483ea:sub$0x20,%esp0x080483ed:movl$0xbeef,0x1c(%esp)0x080483f5:movl$0x80484d0,(%esp)0x080483fc:cal

windows - 如何在 win32 控制台上解析 "printf"而不是 "_printf"的符号?

测试平台是windows32bit。所以基本上我想在这些命令中汇编+链接一段汇编代码:nasm-fwin32test.scltest.obj/linkmsvcrt.lib它说:errorLNK2001:unresolvedexternalsymbolprintf在我的代码中,我确实有这样的函数调用:callprintf所以我把这些都改成了call_printf而且有效。我对windows编程不熟悉,请问有什么方法可以解析printf的外部符号吗?因为我在做一些自动转换的任务,转换所有以_开头的函数调用应该很繁琐...谁能给我一些帮助..?谢谢! 最佳答案

c++ - 使用内联汇编获取变量地址

我想要一个代码来使用C++的内联汇编来获取变量的地址。我是这样做的,但它需要一个值而不是地址#include#includeintmain(){intn=5;DWORDaddr;__asmmovebx,n;__asmmovaddr,ebx;printf("%x",addr);return0;} 最佳答案 如果你真的需要通过汇编程序来做,试试__asmleaebx,n;__asmmovaddr,ebx; 关于c++-使用内联汇编获取变量地址,我们在StackOverflow上找到一个类似的

windows - C++Builder - 在汇编中实现整个功能

我正在尝试实现thisinlineassemblytrick在C++Builder中获取EIP的值。以下代码适用于Release模式:unsignedlongget_eip(){asm{moveax,[esp]}}但是它在Debug模式下不起作用。在Debug模式下,代码必须更改为:unsignedlongget_eip(){asm{moveax,[esp+4]}}通过检查生成的程序集;不同之处在于,在Debug模式下,为get_eip()函数(第一个版本)生成的代码是:pushebpmovebp,espmoveax,[esp]popebpret但是在Release模式下代码是:mov

windows - 如何在 Windows 上的 x86-64 架构上的程序集中注册结构化异常处理程序?

在x86中,您可以使用以下3条指令简单地注册您的处理程序。pushaddrOfExceptionHandlerpushdword[fs:0]mov[fs:0],esp但这不适用于64位Windows。我读过x64异常处理程序是基于表的,VisualC++的__try和__exceptblock硬连接到异常目录中。这是否意味着微软完全放弃了这种旧方法?那么有没有办法从代码中以编程方式注册处理程序? 最佳答案 Windowsx64使用基于表的异常处理(与使用基于帧的处理的x86不同)。每个图像都有一个与其关联的RUNTIME_FUNCT

windows - 在调用 asm 函数之前在 C 中调用 printf 或不调用的神秘副作用?

此程序必须根据用户提供的精度计算圆周率。calculate_pi()函数是用NASM写的。有人可以向我解释为什么如果评论此行://printf("accuracy:%.15f\n",precision);//程序无法正常运行。向calcuta_pi()函数发送奇怪的数字?如果注释掉这一行,就会向函数发送一个非常小的值,程序将无限运行。但如果不是注释程序,则它可以正常工作。#include#includeexterndoublecalculate_pi(doubleprecision);/*externalfunctiondeclaration*/doublecalculate_pi(d

windows - 如何在程序集中打开目录中的文件

我需要在我的C盘中打开一个文本文件,而我的代码在D盘中。有没有办法读取该文件?(我最近开始汇编编程,所以我不知道是否有任何额外的信息我应该写在这里._。)我正在使用windows10x64和nasm但现在我正在尝试使用ollydbg查找一个exe文件数据访问,我知道它们在另一个驱动器上并且搜索moveax,3没有帮助:) 最佳答案 要获取文件句柄,您应该使用CreateFile(OpenFile已弃用)。除了它的名字,它还可以OPEN_EXISTING个文件。Windows支持绝对路径,盘符是绝对路径的一部分,所以打开C:\path