标签: masm

为什么我不能改变段寄存器的值?(MASM)

我决定自学汇编语言.

我已经意识到,如果我尝试更改任何段寄存器的值,我的程序将无法编译.

我发现的每篇文章都说我确实可以改变至少4个段寄存器的值,那么是什么给出了?

我真的只对为什么在这一点上感兴趣,我没有任何改变这些地址的真正目的.

x86 assembly masm

8
推荐指数
1
解决办法
5147
查看次数

逆向工程的汇编语言

我应该选择NASM或MASM来学习装配.我想学习装配,动力是逆向工程.

因此,当我反汇编一些可执行文件时,我可以通过查看反汇编代码来理解代码.

更新:我认为我的自我清楚......我理解那些是汇编程序,但要理解反汇编程序的输出我需要知道汇编,这就是我要问从哪里开始的原因(使用MASM或NASM)

c++ x86 assembly reverse-engineering masm

8
推荐指数
1
解决办法
3925
查看次数

TSL指令参考

我想在汇编中使用"TSL"指令,但它没有参考理解.在一些文章中,该指令是针对互斥问题引入的,但它没有完全理解的参考或完整的例子.

assembly masm

8
推荐指数
1
解决办法
5753
查看次数

写入最多两条指令来清除,设置和补充AL寄存器中的某些位

您需要在汇编中最多编写两条指令才能执行以下操作:

  1. 清除寄存器AL的第0位和第7位,即使它们为0
  2. 设置寄存器AL的第3位和第4位,即将它们设为1.
  3. 补充寄存器AL的第1位和第5位.
  4. 将所有其他位保留在寄存器AL中,而不更改其值.

x86 assembly masm xor

7
推荐指数
1
解决办法
1093
查看次数

`bx`和`bp`之间的区别?

bxbp装配有什么区别?这里的例子:

mov bx, 1h
mov bp, 1h
Run Code Online (Sandbox Code Playgroud)

他们引用相同的内存吗?它是用相同的sssp

assembly masm masm32

7
推荐指数
1
解决办法
9786
查看次数

如何在MASM中删除未使用的.CONST数据?

我在MASM中使用宏来生成大约2000个函数,我为每个函数定义了一个字符串,但在任何给定的程序中我只使用了大约30个函数.

(没有办法预测我将提前使用哪些;我会根据需要使用它们.)

有没有办法告诉链接器"剥离"我最终没有使用的字符串?他们夸大了二进制大小.

linker masm visual-c++

7
推荐指数
1
解决办法
226
查看次数

为什么我必须重建一个未更改的项目?

我有以下MASM代码:

.386
.model flat, stdcall
option casemap :none

include \masm32\include\masm32rt.inc

.data
    NewLine db  13, 10, 0
.code

LibMain proc instance:dword,reason:dword,unused:dword 
    mov     eax, 1
    ret
LibMain endp

PrintMess proc
    print "Printed from assembly"
    invoke StdOut, addr NewLine
    ret
PrintMess endp

TestReturn proc number:dword
    mov     eax, number
    ret
TestReturn endp

End LibMain
Run Code Online (Sandbox Code Playgroud)

使用简单的.def文件:

LIBRARY MyLib
EXPORTS PrintMess
EXPORTS TestReturn
Run Code Online (Sandbox Code Playgroud)

我打电话PrintMess,并TestReturn从C#这样:

[DllImport("MyLib")]
static extern void PrintMess();

[DllImport("MyLib")]
static extern int TestReturn(int num);

static void Main(string[] args) {
    Console.WriteLine("Printed from …
Run Code Online (Sandbox Code Playgroud)

c# interop masm visual-studio-2010

7
推荐指数
1
解决办法
351
查看次数

__cdecl,__ stdcall和__fastcall都被称为完全相同的方式?

我使用Visual C++ 2010,MASM作为我的x64-Assembler.
这是我的C++代码:

// include directive
#include "stdafx.h"
// functions
extern "C" int Asm();
extern "C" int (convention) sum(int x, int y) { return x + y; }
// main function
int main()
{
    // print asm
    printf("Asm returned %d.\n", Asm());
    // get char, return
    _getch();
    return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

我的汇编代码:

; external functions
extern sum : proc
; code segment
.code
Asm proc
    ; create shadow space
    sub rsp, 20o
    ; setup parameters
    mov ecx, 10
    mov edx, 15 …
Run Code Online (Sandbox Code Playgroud)

c++ assembly masm calling-convention visual-c++

7
推荐指数
2
解决办法
4548
查看次数

在MASM32中混淆括号

我试图掌握MASM32,并对以下内容感到困惑:

我认为括号用于间接,所以如果我有一个预定义的变量

 .data
   item dd 42
Run Code Online (Sandbox Code Playgroud)

然后

 mov ebx, item
Run Code Online (Sandbox Code Playgroud)

将'item'的内容,即数字42,放入ebx和

 mov ebx, [item]
Run Code Online (Sandbox Code Playgroud)

将'item'的地址,即存储42的地址放入ebx.

但是控制台应用程序中的以下代码:

 mov ebx, item
 invoke dwtoa, ebx, ADDR valuestr 
 invoke StdOut, ADDR valuestr
 mov ebx, [item]
 invoke dwtoa, ebx, ADDR valuestr 
 invoke StdOut, ADDR valuestr
Run Code Online (Sandbox Code Playgroud)

两次打印42次.要获得"项目"的地址,我似乎需要

 mov ebx, [OFFSET item]
 invoke dwtoa, ebx, ADDR valuestr 
 invoke StdOut, ADDR valuestr
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释MASM中的方括号,或者指出一个很好的参考.

assembly masm masm32

7
推荐指数
1
解决办法
1679
查看次数

MASM.exe和ml.exe有什么区别?

当我安装masm汇编程序时,它要求安装Microsoft visual c ++ 2005 express edition.我安装了它.现在我只能找到"ml.exe".masm.exe在哪里?即使我通过键入masm.exe尝试cmd ,但它没有工作.masm.exe和ml.exe是否相同?

Plss帮帮我....

提前致谢.

windows assembly masm

6
推荐指数
2
解决办法
3349
查看次数