- 主题:小白一问:随意指定地址的指针的行为
DOS时代直接写显存就能更改屏幕上的内容。
当然显存的地址是固定的一个值,而不是你搞的这个12345678。
在地址随机化出来之前,有些shellcode也是硬编码某些地址的。
是否会seg fault,取决于你的这个地址对应的内存是否映射了,以及这个内存位置的RWX权限。
【 在 easior (潜行) 的大作中提到: 】
: 以前的书本里讲指针,会一本正经地举例
: int *p = (int*)0x12345678;
: 煞有介事地说,解引用便可获得随意地址上的内存信息。
: 但操作系统根本不给面子,直接 segmentation fault。
--
FROM 125.33.230.*
你说的这些我都了解,只不过那样的指针现在行不通了
【 在 ArchLinux (a lightweight and flexible distribution) 的大作中提到: 】
: 你需要了解现代通用处理器有虚拟存储系统,有一个成为内存管理单元(MMU)的部件处理内存访问。处理器执行一个内存访问指令的时候,MMU会把要访问的地址转为物理地址,这个机制使得操作系统可以让不同的进程可以访问不同的物理内存,而不同应用程序可以使用同样的虚拟地址
--
FROM 61.155.142.*
对于判断内存是否被映射,以及是否有 RWX的权限,很有兴趣
能否介绍一下哪些系统调用是用来判定这些的?
【 在 z16166 (Netguy) 的大作中提到: 】
: DOS时代直接写显存就能更改屏幕上的内容。
: 当然显存的地址是固定的一个值,而不是你搞的这个12345678。
: 在地址随机化出来之前,有些shellcode也是硬编码某些地址的。
: 是否会seg fault,取决于你的这个地址对应的内存是否映射了,以及这个内存位置的RWX权限。
--
FROM 61.155.142.*
【 在 easior 的大作中提到: 】
: 对于判断内存是否被映射,以及是否有 RWX的权限,很有兴趣
: 能否介绍一下哪些系统调用是用来判定这些的?
:
这个就要调各自操作系统 API 了
https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-isbadreadptr
访问其他进程内存
https://docs.microsoft.com/en-us/windows/win32/api/memoryapi/nf-memoryapi-readprocessmemory
--
FROM 211.249.40.*
找个arm开发板,进uboot,自己体会下指哪写哪的感觉
--
FROM 117.136.0.*
win是Virtual系列api,VirtualQuery/VirtualProtect/VirtualAlloc
【 在 easior 的大作中提到: 】
: 对于判断内存是否被映射,以及是否有 RWX的权限,很有兴趣
: 能否介绍一下哪些系统调用是用来判定这些的?
:
--
FROM 125.33.230.*
内存有保护,随意解引用会seg fault是好事。
如果不seg fault,你的程序甚至操作系统都会出现你无法预料的行为,比如把你银行的钱花光。
【 在 easior 的大作中提到: 】
: 以前的书本里讲指针,会一本正经地举例
: int *p = (int*)0x12345678;
: 煞有介事地说,解引用便可获得随意地址上的内存信息。
: ...................
--
FROM 76.126.252.*
这当然是好事,增加了黑客的难度。
之所以这么问,就是想知道那样指针什么场合下存在?
【 在 here080 (hero080) 的大作中提到: 】
: 内存有保护,随意解引用会seg fault是好事。
: 如果不seg fault,你的程序甚至操作系统都会出现你无法预料的行为,比如把你银行的钱花光。
--
FROM 61.155.142.*
因为你指向的地址对于你的程序来说是个不合法的地址,所以报错。你要指向个合法的地址自然就不会报错了。
简单的说书上写的没错,只是现在的操作系统不让你访问某些地址而已。在你有权限访问的地址范围内,你可以随便指定地址。
【 在 easior 的大作中提到: 】
: 这当然是好事,增加了黑客的难度。
: 之所以这么问,就是想知道那样指针什么场合下存在?
:
--
FROM 219.142.145.*