Python
Java
PHP
IOS
Android
Nodejs
JavaScript
Html5
Windows
Ubuntu
Linux
x86 保护模式下段寄存器的用途是什么?
我需要修改一些dll 但我不知道段寄存器到底是做什么的 DS SS 处于保护模式 我在学校学到了真正的 16 位模式 其中段寄存器乘以 16 加上普通寄存器中的偏移量给出了物理内存中的有效地址 在保护模式下 有一些平面内存模型和虚拟内存 其
Assembly
x86
cpuregisters
memorysegmentation
变址寻址方式和隐式寻址方式
索引寻址模式通常用于访问数组 因为数组是连续存储的 我们有一个索引寄存器 它在每次迭代中都会递增 当添加到基地址时 它会给出数组元素地址 我不明白这种寻址模式的实际需要 为什么我们不能通过直接寻址来做到这一点 我们有了基地址 每次访问的时候
cpuarchitecture
cpuregisters
RISC
是否有任何架构使用相同的寄存器空间来进行标量整数和浮点运算?
我见过的大多数支持本机标量硬件 FP 支持的架构将它们推入完全独立的寄存器空间 与主寄 存器集分开 我见过的大多数支持本机标量硬件 FP 支持的架构将它们推入完全独立的寄存器空间 与主寄 存器集分开 X86 的传统 x87 FPU 使用带有
floatingpoint
cpuarchitecture
cpuregisters
程序启动时(asm、linux)默认的寄存器状态是什么?
当程序启动时 Linux ELF 可执行文件 其中是否有零eax ebx等等或者还有什么吗 我没有进行任何调用或使用外部库 在我的机器上 寄存器被清零 但是在编写 asm 程序时 我可以在新进程中依赖这种行为吗 这完全取决于每个平台的 AB
Linux
Assembly
x86
cpuregisters
ABI
gdb 'x' 命令有什么作用?
在我寻求更多地了解计算机的一般知识时 我偶然发现了一本书 其中有一些关于反汇编 x86 汇编语言以及 C 和 x86 汇编之间的关系的章节 现在我一直在读这个GDB命令 但我无法完全理解它 该命令及其结果如下 gdb x 32xw esp
memory
Assembly
GDB
cpuregisters
为什么 EAX 中的高 16 位不能通过名称访问(如 AX、AH 和 AL)? [复制]
这个问题在这里已经有答案了 为什么没有一个特定的寄存器来访问寄存器的其他部分 16 32 Like ah or al访问8位部分ax登记 我们的想法是将寄存器扩展到 32 位 而不是创建具有两倍数量的 16 或 8 位寄存器的机器 因为这些
Assembly
x86
cpuregisters
在 Linux 64 位上从信号处理程序进行回溯,并在调用堆栈上使用 malloc/free
下面是我想在运行 Red Hat Enterprise Linux 5 5 Tikanga Kernel 2 6 18 194 el5xen x86 64 操作系统的计算机上使用的源示例 总体思路是 我想要某个线程的回溯 因此我为该线程发出
Linux
callstack
cpuregisters
Backtrace
signalhandling
当调用函数时,堆栈帧真的会被推入堆栈吗?
我很长一段时间以来所学到的方法是 当我运行程序时 立即进入堆栈的第一件事是 main 方法的堆栈帧 如果我从 main 中调用一个名为 foo 的函数 那么一个堆栈帧 即局部变量 自动对象 的大小 和参数也会被推入堆栈 然而 我遇到了一些与
c
Assembly
arm
callstack
cpuregisters
从 16 位硬件寄存器读取
在嵌入式系统上 我们有一个设置 允许我们通过命令行界面读取任意数据以用于诊断目的 对于大多数数据 这工作得很好 我们使用memcpy 将数据复制到请求的地址并通过串行连接将其发送回 然而 对于 16 位硬件寄存器 memcpy 导致一些问题
memory
Embedded
cpuregisters
eax 与其他寄存器相比的不同行为
我编写了一个小的汇编代码片段 Gas 32 位 它接受命令行参数 计算其字符并打印字符串 如果它具有一定的长度 仅用于调试目的 我对汇编比较陌生 所以我很确定我在这里错过了一些东西 因为当我将字符串存储在 eax 中时 与 ecx edx
Assembly
cpuregisters
了解CPU寄存器
我是汇编语言的初学者 并试图理解这些都是如何工作的 我的问题可能看起来很愚蠢 但无论如何 我不太清楚 考虑以下简单的程序 section text global start start mov eax text mov val eax mo
Linux
Assembly
CPU
cpuregisters
了解开关条件下的寄存器用法
我有一个 C 语言的开关条件代码和汇编代码 但对我来说设置什么似乎非常随意 edx或eax或ecx 如何区分 edx epx ecx ebp 之间的区别 就连教科书也没有给我足够的解释 include
c
Assembly
x86
switchstatement
cpuregisters
使用 EBX 寄存器进行内存访问的模式是什么?
我正在学习逆向工程的基础知识 在逆向crackme时 我碰巧在几乎每个函数的开头都看到了这种模式 pushl ebp movl esp ebp pushl ebx because ebx is a callee saved register
x86
reverseengineering
cpuregisters
什么是特殊目的寄存器? [关闭]
Closed 这个问题需要多问focused help closed questions 目前不接受答案 什么是特殊用途寄存器 特殊用途寄存器的名称是什么 以及每个寄存器的一些描述 顾名思义 特殊用途寄存器是专为任务而设计的寄存器 例如 c
Assembly
x86
cpuregisters
如何确定寄存器是否从右到左加载,反之亦然
在查看 gdb 输出并查看汇编调用时 通常我可以找到一个使用硬编码值的命令来确定寄存器是否从右到左加载 反之亦然 通常类似于以下内容 sub rsp 16 or sub 16 rsp 但其他时候 没有像上面这样的值可见 我所看到的都是类似以
Assembly
x86
cpuregisters
att
intelsyntax
为什么在 NASM 中使用 RIP 相对寻址?
我有一个适用于 Mac OS X 的程序集 hello world 程序 如下所示 global main section text main mov rax 0x2000004 mov rdi 1 lea rsi rel msg mov
Assembly
x8664
nasm
memoryaddress
cpuregisters
CPU通用寄存器通常是内存映射的吗?
我对内存映射和内存映射 I O 感到困惑 通用寄存器 例如 ARM 架构中的 r0 r1 等 通常是内存映射的吗 不 这些寄存器位于实际 CPU 或多核 CPU 的 CPU 核心 内部 您无法通过加载或存储到任何内存地址来访问它们 内存映射
Assembly
arm
cpuregisters
memorymapping
可执行文件中的函数地址(由 objdump 检查)与 printf 打印的同一函数的地址不匹配。幕后发生了什么?
我使用的是 Ubuntu 22 04 3 x86 64 系统 我知道虚拟内存和页面一般是如何工作的 我也知道系统可以使用 ASLR 不过我想知道在这个特定场景下 Ubuntu 系统到底会发生什么 我在名为 test c 的文件中有这个小程序
c
Assembly
cpuregisters
virtualaddressspace
aslr
将值存储在 MIPS 的 HI 和 LO 寄存器中
我正在 MIPS 中编写某些代码 并且要求将结果暂时存储在HI and LO特殊寄存器 均为 4 字节宽 这些说明可供我使用 divu s t lo lt s div t hi lt s mod t multu s t hi lo lt s
Assembly
MIPS
cpuregisters
spim
汇编扩展寄存器不工作
我对 Assembly 和 TASM 相当陌生 我有以下问题 我想使用寄存器的扩展版本 特别是 EBX 通过使用下面的代码 但没有 386 指令 它不起作用 说 未定义的符号 EBX 但有了它 它无法识别 INT 21h 指令 据我了解 该
Assembly
x8616
cpuregisters
tasm
«
1
2
3
4
5
»