【发布时间】:2014-08-27 11:11:08
【问题描述】:
我已经在每个网页上搜索了答案,但我似乎找不到。我已经学习网络范围的汇编语法大约 2 个月了,我正在尝试找到一种将数据存储在内存中的方法。
我知道 sys_break:
mov,eax 45
保留内存,我有一个功能宏,可以保留 16kb 的内存:
%macro reserve_mem
mov eax,45
xor ebx,ebx
int 80h
add eax,16384
mov ebx,eax
mov eax,45
int 80h
%endmacro
我也知道,当您保留字节 (resb) 时,字等。在 .bss 部分中,将一小部分内存分配给未初始化的数据。
此外,还有一个虚拟内存,可以通过0x0000这样的地址访问,然后将其映射到它的实际内存位置。
但是,我的问题是我试图将数据存储在内存中,但我尝试的所有操作都以分段错误(核心转储)结束,这是程序试图访问它无法访问的内存。我已经尝试过如下代码。
mov [0x0000],eax
感谢您的帮助。
【问题讨论】:
-
为什么是
0x0000?您应该只访问已分配给您的进程的内存,可以使用resb等静态访问,也可以使用例如动态访问。sys_brk. -
多谢回复,不过能不能这样,比如把数字1放到内存里?
-
@morgan 至少 x86 支持这样的操作。您熟悉 C 或其他编程语言吗?您在计算机编程领域有什么样的经验?我们需要了解您的水平,以便为您提供有效的建议。
-
你想写入哪个内存?你用
sys_brk分配的块?你不能只写随机地址。 -
nodakai,我今年 15 岁,具有 Java 知识和一点 C 知识,还有 Michael,是的,如果可能的话,我想写入我分配的内存。感谢您的帮助。
标签: memory-management assembly nasm