通常我们都看到基本的缓冲区溢出格式,它具有: -
NOPs + shellcode + return_address
为什么我们不使用,
NOPs + return_address + shellcode?我们将返回地址指向shellcode的开头?
我猜这是因为如果漏洞位于main()中,我们可能会尝试在堆栈段外写入数据.我对吗?如果我,那是唯一的原因吗?
哦,是的,我不是指使用return-to-libc,ptrace等的其他类型的攻击; 我只想知道为什么最基本的缓冲区溢出攻击以第一种方式展示而不是第二种方式.
我怀疑每个进程是否有自己独立的页表,那么为什么需要系统范围的页表呢?此外,如果Page表是将虚拟地址映射到物理地址,那么我认为两个进程可能映射到相同的物理地址,因为所有进程都具有相同的虚拟地址空间.系统范围页面表上的任何良好链接也将解决我的问题?
shmget.c:
#include<sys/types.h>
#include<string.h>
#include<sys/ipc.h>
#include<sys/shm.h>
#include<stdio.h>
main()
{
key_t key;
int shmid;
char* addr1;
key = ftok("/home/tamil/myc/pws.c",'T');
shmid = shmget(key,128*1024,IPC_CREAT|SHM_R|SHM_W);
addr1 = shmat(shmid,0,0);
printf("\nIPC SHARED MEMORY");
printf("\n SENDER ADDRESS");
printf("\nTHE ADDRESS IS %p",addr1);
printf("\nENTER THE MESSAGE:");
scanf("%s",addr1);
printf("\nMESSAGE STORED IN %p IS %s",addr1,addr1);
}
Run Code Online (Sandbox Code Playgroud)
shmget2.c:
#include<sys/types.h>
#include<string.h>
#include<sys/ipc.h>
#include<sys/shm.h>
#include<stdio.h>
main()
{
int shmid;
char* addr1;
key_t key;
key = ftok("/home/tamil/myc/pws.c",'T');
shmid = shmget(key,128*1024,SHM_R|SHM_W);
addr1 = shmat(shmid,0,0);
printf("\nIPC SHARED MEMORY");
printf("\n SENDER ADDRESS");
printf("\nTHE ADDRESSS IS %p",addr1);
printf("\nMESSAGE STORED IN …Run Code Online (Sandbox Code Playgroud)