How to get c code to execute hex machine code?

前端 未结 6 1726
南旧
南旧 2020-12-01 05:36

I want a simple C method to be able to run hex bytecode on a Linux 64 bit machine. Here\'s the C program that I have:

char code[] = \"\\x48\\x31\\xc0\";
#in         


        
6条回答
  •  北荒
    北荒 (楼主)
    2020-12-01 06:21

    This will take some effort.

    Your code variable is stored in the .data section of your executable:

    $ readelf -p .data exploit
    
    String dump of section '.data':
      [    10]  H1À
    

    H1À is the value of your variable.

    The .data section is not executable:

    $ readelf -S exploit
    There are 30 section headers, starting at offset 0x1150:
    Section Headers:
      [Nr] Name              Type             Address           Offset
           Size              EntSize          Flags  Link  Info  Align
    [...]
      [24] .data             PROGBITS         0000000000601010  00001010
           0000000000000014  0000000000000000  WA       0     0     8
    

    All 64-bit processors I'm familiar with support non-executable pages natively in the pagetables. Most newer 32-bit processors (the ones that support PAE) provide enough extra space in their pagetables for the operating system to emulate hardware non-executable pages. You'll need to run either an ancient OS or an ancient processor to get a .data section marked executable.

    Because these are just flags in the executable, you ought to be able to set the X flag through some other mechanism, but I don't know how to do so. And your OS might not even let you have pages that are both writable and executable.

提交回复
热议问题