问题标签 [address-space]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
unix - 将环境变量作为命令行参数传递时的内存分配
我正在尝试在 linux 中进行简单的缓冲区溢出攻击。我有一个接受命令行参数的易受攻击的程序。我有另一个程序,它设置了一个环境变量,其中包含一些我想要执行的代码(通常是 shellcode)。现在我试图用这个环境变量的地址溢出我易受攻击的程序的缓冲区。我有以下问题:
当我将环境变量作为命令行参数传递时,变量的内容是否被复制到易受攻击程序的 argv 中?
环境变量(命令行参数)将存储在进程的地址空间中的什么位置?它会在进程堆栈上还是在其他地方?
python - Python:在linux下写入另一个进程的内存
如何在 Ubuntu Linux 下使用 python 写入另一个进程的地址空间?我的尝试:
1) 使用虚拟文件 /proc/$PID/mem 并寻找地址。我已成功使用它来读取内存,但尝试写入会导致 IOError:
输出:
2) 尝试按照其他线程中的建议使用 python-ptrace 库。但是,我找不到好的文档或示例代码。
注意:这不是权限问题,以 root 身份运行会产生相同的行为。
bus - 可寻址性 vs 地址空间 vs 地址总线
您如何根据地址空间确定可寻址性?如何根据可寻址性确定地址总线的大小?前任。一台机器的寻址能力是32位,地址总线的大小是多少?
c++ - 代理成员访问
一个类在访问它的成员时是否有可能充当代理?最简单的方法当然是编写 getter/setter,但这既不灵活又不优雅,因为您必须自己编写所有的 setter,这会使代码膨胀。
问题是我想抽象出一些数据位于微控制器程序中的事实。基本上我想要那个
被翻译成类似的东西
在嵌入式 C 中,可以使用地址空间__flash
来做类似的事情。不幸的是,C++ 不支持这一点。
所以我想到了重载operator->()
。不幸的是operator->()
,没有得到您要访问哪个成员的任何信息(顺便说一句:为什么是 wtf?-> 的唯一目的是访问一个成员,那么为什么有人要丢弃这些信息?)。.
根本无法覆盖。
有人知道如何解决这个问题吗?当然,语法不一定是->
。如果可以使用一些深奥的模板构造,我也会很高兴。我不太了解 C++,也许根本不可能。C++ 在元编程方面似乎有点不灵活。
编辑:从答案中得到灵感后,我现在决定使用包装类并覆盖强制转换运算符。
.net - dotnet 中每个逻辑处理器的堆是多少?
我有几个问题,包括两个案例的标题中的一个(在 dotnet 和一般情况下)
(1)是每个逻辑处理器的堆(我猜一般是肯定的)
(2)是每个逻辑处理器的地址空间(一般是?)
(3) 一个进程可以访问多个堆吗?(我猜对 dotnet 来说不,而一般来说是。如果一般来说是正确的。人们为什么以及什么时候会这样做?)
(4) 是每个 dotnet 框架的 GC。
谢谢
dll - 当您在内存中编辑 dll 时,其他应用程序是否看到更改?
假设我正在使用 Cheat Engine 编辑内存中的 kernel32.dll 代码。我想问一下,当我编辑它时,是否有其他程序使用加载该 dll 的相同地址空间?还是每个进程都获得 dll 的单独副本,并且您可以随意更改它,但可能发生的唯一崩溃将仅针对该进程?
c - 将地址空间除以 8
我的问题是关于处理地址空间。
我有两个十六进制地址空间:0x7ffffff09 和 0x7fffff08。
我怎么知道它们是否可以被 8 或 8 字节对齐整除?就像检查在 C 或 C++ 代码中的样子一样。我知道您通常将 mod 用于常规数字,如果没有余数,那么您就知道它是可整除的。
编辑:地址空间可以是__8、__16、__32(8位、16位、32位)
windows - 在窗口中地址空间
如果硬盘中没有可用空间,当我运行应用程序时系统会做什么?在哪里创建分页文件?
assembly - 当处理器试图访问一个不存在的物理地址时会发生什么?
想象一台 32 位 x86 计算机,其内存少于 3 GB,CPU 设置为禁用分页和平面段描述符(0x0
作为基础,0xffffffff
作为数据和代码的有效限制)。
当 ring0 中的一条指令试图使用一条mov
指令来引用一个没有任何内存地址支持的物理地址时会发生什么?
QEMU 仿真只是因为“致命:尝试在 RAM 或 ROM 之外执行代码”之类的错误而停止。
这些异常与内存问题有关:
- 它不应该是“段不存在(
#NP
)”:它只在加载段寄存器时发生,但我实际上可以毫无问题地加载扁平段。 #SS
不应生成“堆栈错误( )”,因为代码不引用堆栈。- “一般保护(
#GP
)”不应该发生,因为代码在 ring-0 中运行并且段被设置为允许访问每个物理地址。 - 分页被禁用,因此它也不是“页面错误(
#PF
)”。 - 而且这不是对齐问题,因此不应触发“对齐检查(
#AC
)”。
我没有选择,我不知道会发生什么。
linux - 计算进程内环境的内存地址
我从安全课程的讲座幻灯片中获得了以下代码。
该代码在其环境中调用带有 shellcode 的易受攻击的程序。shellcode 是外部文件中的一些汇编代码,它打开一个 shell,VULN 定义了易受攻击的程序的名称。
我的问题:shellcode地址是如何计算的
addr 变量保存 shellcode 的地址(它是环境的一部分)。谁能向我解释这个地址是如何确定的?所以:
- 0xc0000000 - 4 来自哪里?
- 为什么要减去 shellcode 的长度和程序名?
请注意,这段代码和易受攻击的程序都是这样编译的:
所以地址空间随机化被关闭。
我知道堆栈是进程内部的第一件事(最高内存地址)。堆栈按以下顺序包含:
- 环境数据。
- argv
- 氩气
- main的返回地址
- 帧指针
- main 中的局部变量
- ...ETC...
常量和全局数据不存储在堆栈中,这就是为什么我也不明白为什么 VULN 常量的长度会影响放置 shellcode 的地址。
希望你能帮我解决这个问题:-)
请注意,我们正在使用 intel x86 架构上的 unix 系统