小编dot*_*dot的帖子

使用libelf提示生成ELF

我正在尝试使用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)

c linux elf abi

6
推荐指数
1
解决办法
3388
查看次数

系统管理程序如何知道特权指令在VM内部发生?

我已经开始阅读有关VMM的文章,并想知道管理程序如何知道特权指令(例如cpuid)发生在VM而不是真正的OS中?

假设我已经执行了cpuid,就会发生陷阱并发生VMEXIT,炒作者如何知道指令发生在我的常规OS或VM内?

virtualization hypervisor

2
推荐指数
1
解决办法
3498
查看次数

标签 统计

abi ×1

c ×1

elf ×1

hypervisor ×1

linux ×1

virtualization ×1