我正在尝试使用libelf生成一个简单的静态ELF,但我似乎遇到了麻烦.
我不希望生成一个目标文件然后用LD链接它,而是希望我自己生成它.
该程序的主要目的是生成具有一个LOAD段的静态ELF并执行代码.
主要问题不在于shellcode本身,而是在我试图以错误的方式生成的一些标题中.当我尝试运行生成的ELF时,它会被杀死,好像内核无法找到它刚刚加载的段等.
如果你们能暗示我,我会很喜欢.
create_elf.3.c
#include <err.h>
#include <fcntl.h>
#include <libelf.h>
#include <stdio.h>
#include <stdlib.h>
#include <sysexits.h>
#include <unistd.h>
unsigned char code[] =
"\x0b\x58\x99\x52\x66\x68\x2d\x70"
"\x89\xe1\x52\x6a\x68\x68\x2f\x62\x61"
"\x73\x68\x2f\x62\x69\x6e\x89\xe3\x52"
"\x51\x53\x89\xe1\xcd\x80";
int main(int argc, char *argv[])
{
int fd;
Elf *e;
Elf_Scn *scn;
Elf_Data *data;
Elf32_Ehdr *ehdr;
Elf32_Phdr *phdr;
Elf32_Shdr *shdr;
if (argc != 2)
errx(EX_USAGE,"input... ./%s filename\n",argv[0]);
if (elf_version(EV_CURRENT) == EV_NONE)
errx(EX_SOFTWARE,"elf_version is ev_none, wtf? %s\n",elf_errmsg(-1));
if ((fd = open(argv[1], O_WRONLY | O_CREAT, 0777)) < 0)
errx(EX_OSERR, "open %s\n",elf_errmsg(-1));
if ((e = …
Run Code Online (Sandbox Code Playgroud) 我已经开始阅读有关VMM的文章,并想知道管理程序如何知道特权指令(例如cpuid)发生在VM而不是真正的OS中?
假设我已经执行了cpuid,就会发生陷阱并发生VMEXIT,炒作者如何知道指令发生在我的常规OS或VM内?