相关疑难解决方法(0)

178
推荐指数
6
解决办法
22万
查看次数

在操作系统的上下文中,Ring 0和Ring 3是什么?

我一直在学习Windows中驱动程序开发的基础知识我一直在寻找Ring 0Ring 3这两个术语.这些是指什么?它们与内核模式用户模式相同吗?

operating-system driver

35
推荐指数
2
解决办法
4万
查看次数

21
推荐指数
3
解决办法
2万
查看次数

英特尔32位和64位寄存器的名称中E和R前缀代表什么?

32位寄存器名称以E开头,64位寄存器以R开头.E和R代表什么?是否有理由选择这些字母?

此外,在64位寄存器中,我们也可以在任何低级调试器(如Windbg)中看到,最右边的位仍然用与64位寄存器相同的名称引用,除了名称以E.例如,64位系统中RAX寄存器的最右边32位称为EAX.

那么,E和R代表什么?而且,为什么后缀X用于注册?

64-bit x86 assembly x86-64 cpu-registers

13
推荐指数
1
解决办法
3294
查看次数

汇编寄存器采用64位架构

关于汇编寄存器的大小答案:

  • 首先,什么尺寸eax,ax,ah和同行,在64位架构?如何访问单个寄存器的字节以及如何访问所有64位寄存器的8个字节?

    我非常喜欢x86-64(x64)Itanium处理器.

  • 第二,在新的调用约定中,使用四个寄存器来保存函数调用中前四个参数的正确方法是什么?

assembly x86-64 itanium cpu-registers 32bit-64bit

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

C 和汇编 __asm 不起作用

我发现这段代码将堆栈指针放入EAX寄存器(它应该是C中“return”使用的寄存器)

#include <stdio.h>
unsigned long get_sp(){
    unsigned long stp;
    __asm{
        mov
        eax, esp
        }
}

void main(void){
printf("\n0x%x", get_sp());
}
Run Code Online (Sandbox Code Playgroud)

我用 Geany 试过了,但它不起作用!!然后我按照编译器日志,以这种方式更改了代码:

#include <stdio.h>

unsigned long get_sp(void);

int main(void){
printf("\n0x%ld", get_sp());
return 0;
}


unsigned long get_sp(void){
    unsigned long stp;
    __asm{
        mov eax, esp
    }
}
Run Code Online (Sandbox Code Playgroud)

这次我的主要功能没有问题,但其他功能是悲剧!!!它无法识别 __asm。未知类型名称 'mov'.... 未使用的变量 'eax'... 似乎它想要 __asm() 而不是 __asm{},就像正常调用函数一样。有人可以帮助我吗?PS 我有 debian 64 ......它可能在 64 架构上有一些问题??

c assembly gcc

5
推荐指数
1
解决办法
1656
查看次数

x64dbg 中的“r8d”是什么?

我正在调试我的 x64 c++ 程序以了解它在 x64dbg 中的外观。我在右侧窗口中看到一些 r8-r15 的寄存器,但我没有看到r8d. 还有其他人也有类似的情况r15d。那么它是什么?

这是我的 x64dbg 的屏幕截图。 这是我的 x64dbg 的屏幕截图。

reverse-engineering x64dbg

5
推荐指数
1
解决办法
2329
查看次数

为什么他们在x86-64中使用数字作为寄存器名称?

AFAIK X86-64增加了大量的通用寄存器的那些从英特尔86(派生rax,rcx等),被称为r8- r15.

他们为什么要这样命名新的寄存器?为什么不遵循现有的命名规则,并呼吁他们一样rfx,rgx...?

assembly x86-64 cpu-registers isa

3
推荐指数
1
解决办法
661
查看次数

错误:地址大小的不可能组合

我正在尝试学习如何使用汇编语言来改变牌组.我精通java,我可以很容易地将java翻译成C,但我在ASM上遇到了困难.这是我现在遇到的代码块:

MOV R8, [RDI+RSI*4]

MOV R9, [RDI+RDX*4]

MOV  [RDI+RSI*4], R9

MOV  [RDI+RDX*4], R8
Run Code Online (Sandbox Code Playgroud)

我一直在

error: impossible combination of address sizes
Run Code Online (Sandbox Code Playgroud)

它是用命令运行的

nasm -f elf FILE-NAME.asm
Run Code Online (Sandbox Code Playgroud)

我猜它与我正在使用的寄存器有问题,但我不知道汇编中的规则.我正在学习使用tutorialspoint但是如果有人对其他地方有任何建议我可以更好地学习它,这将是有帮助的.我也在这个答案上看到所有使用的寄存器都有相同的大小,为什么会出错呢?

assembly x86-64 nasm

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