编辑:基本上我需要的是Visual Studio在我调试时总是重建所有内容.
我目前正在使用visual studio来编译我的汇编程序,使用MASM,一般来说它工作正常.
但是我遇到了一个恼人的问题:
如果我包含这样的文件(比如带有函数的文件)
Include functions.inc
Run Code Online (Sandbox Code Playgroud)
并编译它,它最初工作正常.但是,如果我然后更改 functions.inc的内容,则无法识别,并且编译器会跳过functions.inc并在更改之前使用旧版本.
我找不到项目属性下的任何选项来解决这个问题.但是我确定它与链接器选项或其他东西有关 - 如果我在项目属性下进行任何更改(即使我更改了某些内容并将其更改回来,然后按OK),它确实可以使用新版本的functions.inc.
有任何想法吗?
我遇到了一些非常奇怪的事情,事情就是不加起来.首先,我在这里发布了这个,因为我不确定这是否与计算机病毒有任何关系.如果确实如此,请你指点我到一个寻求帮助的地方?
所以现在:
我在这里有一些奇怪的问题,我的反病毒和恶意软件标记代码*用masm和masm示例编译为病毒.我用谷歌搜索,发现这个问题已经发生过,所以我没有太认真对待这个问题,起初认为这是假阳性.
但是我编译了你在这篇文章底部看到的代码来测试我的其他一些东西.我通过ollydbg运行它(同时忽略了我的comodo反病毒)然后我看到了这个:
00401000 > -E9 FBEF6F71 JMP 71B00000 ; this is a weird jump I did not put there
00401005 90 NOP
00401006 8BC0 MOV EAX,EAX
00401008 . 8BD8 MOV EBX,EAX
0040100A . 33D9 XOR EBX,ECX
0040100C . 8BC3 MOV EAX,EBX
0040100E . 03CB ADD ECX,EBX
00401010 . 33C3 XOR EAX,EBX
00401012 . 2BC1 SUB EAX,ECX
00401014 . 8BCB MOV ECX,EBX
00401016 . 33D9 XOR EBX,ECX
Run Code Online (Sandbox Code Playgroud)
下面的代码不可能编译成跳转,所以我正在踩到代码.过了一会儿,我看到奇怪的代码开始通过ntdll.dll库中的api进行枚举.发生了什么?如果这确实是病毒在哪里得到帮助?
但我仍然不确定,comodo和malwarebytes都只将示例标记为病毒,而不将文件(test.exe)标记为病毒
我用来测试的测试代码......
*:include\masm32\include\masm32rt.inc
.data
.code
Start:
nop
nop
nop
nop
nop …Run Code Online (Sandbox Code Playgroud) 我正在学习装配,能够进行逆向工程的动力.我正在尝试找到我应该开始的汇编程序,以便我可以找到教程并开始编写一些程序集.
我开始知道MASM有很多内置结构,因此我将主要使用它们而不是编码它们,如果我选择NASM,我将不得不这样做.
我的问题是......是真的吗?如果是的话,你建议从逆向工程师的角度学习装配的汇编程序和一些好的教程.
另外,如果您有关于倒车的其他建议?替代方法还是什么?
PS:我在这里看过很多文章和问题,但我仍然感到困惑.
我是来问你一些关于 VS2017 的东西的。
过去,我曾将 WinAsm 用于 MASM,但从未遇到过问题。
然而,当我尝试在 VS2017 中使用 MASM 做一些事情时,我总是会遇到问题和东西......
我已经检查了整个互联网关于“如何为 MASM 设置 VS”,但没有任何帮助我,因为我总是遇到麻烦...
有没有什么方法可以将 Visual Studio 2017 用于 MASM32/64 位而不会感到头疼?
有人可以给我设置 VS2017 进行汇编编程的终极指南吗?
非常感谢您,并为我的英语不好而感到抱歉。
我正在尝试在汇编中划分两个数字.我正在为英特尔计算机书的欧文大会工作,我无法为我的生活做分工.
这是我的代码
.code
main PROC
call division
exit
main ENDP
division PROC
mov eax, 4
mov ebx, 2
div ebx
call WriteDec
ret
divison ENDP
END main
Run Code Online (Sandbox Code Playgroud)
WriteDec应写入eax寄存器中的任何数字(应在除法调用后设置为商).相反,每当我运行它时,visual studio崩溃(程序确实会编译).
我正在将一个函数从内联汇编移植到Visual Studio 2013中的MASM,并且无法从中获取返回值.
这是C调用者和汇编函数原型:
extern "C" void AbsMax(__m128d* samples, int len, __m128d* pResult);
__m128d AbsMax(__m128d* samples, int len)
{
__m128d absMax = { 0, 0 };
AbsMax(samples, len, &absMax);
return absMax;
}
Run Code Online (Sandbox Code Playgroud)
和组装功能:
.686 ;Target processor. Use instructions for Pentium class machines
.xmm
.model flat, c ;Use the flat memory model. Use C calling conventions
.code ;Indicates the start of a code segment.
AbsMax proc samples:PTR DWORD, len:DWORD, result:PTR XMMWORD
;; Load up registers. xmm0 is min, xmm1 is max. …Run Code Online (Sandbox Code Playgroud) 我正在学习微处理器编程课程,作为我的电子工程学位的一部分.不幸的是,在实验室中,我们必须使用MASM在DOS中工作.
现在,我并没有真正发现DOS是一个障碍,但我只是在家里的电脑上没有它(而且没有我有软盘驱动器的电脑),所以我无法练习编写程序.我在Windows下尝试过,但它没有组装(我猜这是因为保护模式).
关于我该怎么做的任何建议?我应该学会在保护模式下编程吗?这对我的课程有帮助吗?课程重点是8086.
也许虚拟机可以提供帮助?如果是这样,我在哪里可以获得DOS和MASM?
我目前正在攻读x86组装的考试.
我没有太多运气谷歌搜索":",太常见的标点符号:/
IDIV - 签署的整数部门
用法:IDIV src
修改标志:(AF,CF,OF,PF,SF,ZF未定义)
按源分配累加器的二进制除法.如果source是字节值,则AX除以"src",商存储在AL中,余数存储在AH中.如果source是一个字值,则DX:AX除以"src",并且商存储在AL中,余数存储在DX中.
摘自"Intel Opcodes and Mnemonics"
DX:AX是什么意思?
非常感谢你的时间:)
我在业余时间学习汇编语言,成为一名更好的开发人员.
我理解基于堆栈的机器和基于寄存器的机器在概念层面上的区别,但我想知道基于堆栈的机器是如何实际实现的.如果虚拟机(例如JVM或.NET)在基于寄存器的体系结构(例如x86或x64)上运行,那么它必须在汇编级别使用寄存器(就我而言).我显然在这里遗漏了一些东西.因此,我不确定汇编语言的区别.
我在这里阅读过文章,例如基于堆栈的机器依赖于基于寄存器的机器?以及维基百科,但我不相信他们会直接回答我的问题.
为什么DS和ES寄存器的初始化必须由程序员手动完成?
例如:
MOV AX, DTSEG
MOV DS, AX
Run Code Online (Sandbox Code Playgroud)
另一方面,CS和SS寄存器由操作系统(in MS-DOS)初始化.为什么会这样?