Python
Java
PHP
IOS
Android
Nodejs
JavaScript
Html5
Windows
Ubuntu
Linux
x86 实模式下的段大小
我对实模式下段的大小有一个疑问 因为它们不能超过 64K 但可以小于那个 http support microsoft com kb 120069 我的问题是这些段大小和基地址是如何初始化的 就像保护模式下有 GDT 和 LDT 一样 实模
Assembly
x86
memorysegmentation
realmode
计算段:距绝对地址的偏移量
我可以计算一个地址Segment Offset as Segment 0x10 Offset 但如何计算相反的情况呢 例如 我怎样才能从0xF4170 to F400 0170和来自0xACF04 to ABCD 1234 您需要具有起始基
Assembly
x8616
memorysegmentation
如何在不链接libc.so的情况下访问段寄存器?
我正在尝试在 Ubuntu 20 10 上使用 NASM 版本 2 15 04 在 64 位程序集中编写一个简单的堆栈金丝雀 执行下面的代码会导致在使用命令进行汇编和链接时出现分段错误nasm felf64 canary asm ld ca
用汇编语言更改 CS:IP
怎么可以强行改变CS and IP都是汇编语言 ORG指令可用于更改的数量IP 但是你如何改变CS 基本上我想使用汇编来实现多线程 许多论坛 包括堆栈溢出中的一个问题都说这是不可能的 但是即使 C 是由汇编代码制成的 它如何具有多线程选项呢
Assembly
x86
memorysegmentation
为什么“分段错误”在 C 中仍然存在
操作系统中的分段是一个与时间本身一样古老的概念 至少根据我的教授的说法 大多数现代操作系统已经放弃了分段的概念 现在主要依靠分页来实现内存保护 从而防止每个进程访问除自己的内存之外的任何其他内存 那么我们如何在 C 中仍然遇到 分段错误 在
c
operatingsystem
segmentationfault
x8664
memorysegmentation
实模式内存寻址中的段和偏移量是什么?
我正在阅读有关内存寻址的内容 我阅读了有关段偏移的内容 然后阅读了有关描述符偏移的内容 我知道如何在实模式下计算确切的地址 这一切都可以 但我无法理解偏移量到底是什么 我到处读到 在实模式下 寄存器只有16位 因此只能寻址 高达 64k 为
Assembly
x86
x8616
realmode
memorysegmentation
分段寄存器的使用
我试图了解内存管理如何在低水平上进行 并有几个问题 1 Kip R Irvine 写的一本关于汇编语言的书说 在实模式下 程序启动时前三个段寄存器会加载代码 数据和堆栈段的基地址 这对我来说有点模棱两可 这些值是手动指定的还是汇编器生成指令
Linux
memory
x86
memorysegmentation
查找fs:28h的内存地址
我为了好玩而使用 gdb 调试程序 并使用堆栈保护 以便它从 fs 28h 将金丝雀写入堆栈 出于好奇 我试图找到 fs 28h 指向的内存地址 我遇到两个问题 首先 gdb 无法显示 gdtr ldtr 中的值 因为它不在环零中运行 第二
c
Linux
GDB
x8664
memorysegmentation
ORG指令后设置段寄存器
我目前正在关注操作系统开发教程 http brokenthorn com Resources OSDev4 html 其中包括有关引导加载程序的讨论 我的引导加载程序当前处于 16 位实模式 因此 我能够使用提供的 BIOS 中断 例如 V
nasm
x8616
cpuregisters
Segment
memorysegmentation
x86 保护模式下段寄存器的用途是什么?
我需要修改一些dll 但我不知道段寄存器到底是做什么的 DS SS 处于保护模式 我在学校学到了真正的 16 位模式 其中段寄存器乘以 16 加上普通寄存器中的偏移量给出了物理内存中的有效地址 在保护模式下 有一些平面内存模型和虚拟内存 其
Assembly
x86
cpuregisters
memorysegmentation
从给定的物理和有效地址查找段地址
如何从给定的数据中找到段地址 物理地址 0x119B 有效地址 0x10AB 公式可能是什么 x86 16位实模式下的有效地址只是20位的偏移量部分段 偏移量 address https thestarman pcministry com
Assembly
x8616
realmode
memorysegmentation
如何在 gdb 中使用带有 FS 或 GS 基址的逻辑地址?
gdb 提供了读取或写入特定的功能线性地址 例如 gdb x 1wx 0x080483e4 0x80483e4
GDB
x86
memorysegmentation
操作码中的汇编段
我注意到在操作码中使用了汇编段 Example MOV DWORD PTR SS EBP 30 30 我认为 PTR SS 用于指定EBP 30来自堆栈 SS 堆栈段 我是对的还是完全错的 而且 你能告诉我上面的例子和 MOV DWORD
Assembly
x86
MASM
addressingmode
memorysegmentation
什么是段以及如何在 8086 模式下寻址它们?
自从我开始使用 8086 汇编语言编程以来 我一直在思考这些段和段寄存器 我面临的问题是 我无法对脑海中的片段有一个直观的图像 因此我不清楚这些概念 谁能帮我理解这个概念将其与现实世界场景联系起来 我还有以下问题 问题一 据我了解 在启用2
Assembly
x86
operatingsystem
x8616
memorysegmentation
C 是否有与 C++ 中的 std::less 等效的东西?
我最近正在回答一个关于 do 的未定义行为的问题p lt q在C中当p and q是指向不同对象 数组的指针 这让我想到 C 具有相同的 未定义的 行为 lt 在这种情况下 还提供了标准库模板std less保证返回与 lt 当指针可以比较
c
pointers
undefinedbehavior
memorymodel
memorysegmentation
内存中的变量未通过存储更新为该符号
当我运行 emu8086 时 这个结果 和 返回给我 0 为什么 data segment ans dw ends stack segment dw 128 dup 0 ends code segment start mov ax data
Assembly
x8616
emu8086
memorysegmentation
为什么 mov 不能设置代码段寄存器 CS,尽管它可以设置其他寄存器?
我需要知道使用 mov 指令直接加载代码段寄存器是否有任何限制 在从实模式切换到保护模式时 这一点让我印象深刻 我发现为了将正确的值放入代码段中 使用 跳转 指令来设置正确的段 那么跳转指令的这种使用是否是由于任何这样的限制 为什么我们不能
Assembly
x86
memorysegmentation
在实模式下跳转到远地址
我遇到一种情况 我必须在实模式下跳转到远地址 我的段值在fs寄存器和偏移量gs寄存器 在跳转过程中我必须保持准确的寄存器内容 我想出了一个想法如下 mov bp fs shl ebp 16 mov bp gs jmp ebp 假设bp fs
Assembly
x86
x8616
realmode
memorysegmentation
x86 段寄存器在现代 CPU 和操作系统上有特殊含义/用途吗?
从 16 位到 32 位再到 64 位 x86 CPU 历代都有各种棘手的模式和内存分段 如今 现代操作系统在现代操作模式下使用现代 CPU 您不必担心内存段 但您仍然可以在现代 CPU 上的旧操作系统上运行旧应用程序 在这种情况下 我假设
x86
history
cpuregisters
memorysegmentation
386的“D位”中的“D”代表什么?
In 关于 GDT 的文章OSDev wiki 描述了用作 CS 描述符的 D 位的标志 如下所示 Sz 尺寸位 如果0选择器定义16位保护模式 如果1它定义了32位保护模式 您可以同时拥有 16 位和 32 位选择器 另一个问题引用了英特
Assembly
x86
terminology
memorysegmentation
gdt
1
2
»