Note
The Funtoo Linux project has transitioned to "Hobby Mode" and this wiki is now read-only.
Difference between revisions of "Funtoo binfmt misc Qemu chroot Guide"
Jump to navigation
Jump to search
Line 1: | Line 1: | ||
=''Funtoo binfmt_misc Qemu chroot Guide: aka (Frankenroot)''= | =''Funtoo binfmt_misc Qemu chroot Guide: aka (Frankenroot)''= | ||
{{file|name=qemu-arm.c|lang=C|desc=qemu arm wrapper|body= | |||
/* | |||
* Call QEMU binary with additional "-cpu cortex-a53" argument. | |||
* | |||
* Copyright (c) 2018 sakaki <sakaki@deciban.com> | |||
* License: GPL v3.0+ | |||
* | |||
* Based on code from the Gentoo Embedded Handbook | |||
* ("General/Compiling_with_qemu_user_chroot") | |||
*/ | |||
#include <string.h> | |||
#include <unistd.h> | |||
int main(int argc, char **argv, char **envp) { | |||
char *newargv[argc + 3]; | |||
newargv[0] = argv[0]; | |||
newargv[1] = "-cpu"; | |||
newargv[2] = "cortex-a7"; | |||
memcpy(&newargv[3], &argv[1], sizeof(*argv) * (argc -1)); | |||
newargv[argc + 2] = NULL; | |||
return execve("/usr/local/bin/qemu-arm", newargv, envp); | |||
} | |||
}} | |||
{{file|name=masky.py|lang=python|desc=masky|body= | |||
#!/usr/bin/python3 | |||
import sys | |||
import struct | |||
import string | |||
import codecs | |||
printable_chars = set(string.printable) | |||
printable_chars = set() | |||
def print_out_hexstring(hexstring): | |||
to_process = hexstring | |||
while len(to_process): | |||
ascii_value = chr(int(to_process[:2], 16)) | |||
to_process = to_process[2:] | |||
if ascii_value in printable_chars: | |||
sys.stdout.write(ascii_value) | |||
else: | |||
sys.stdout.write("\\x" + "{0:02x}".format(ord(ascii_value))) | |||
chunk_as_hexstring = "" | |||
with open(sys.argv[1], 'rb') as f: | |||
for x in range(0,19): | |||
chunk_as_hexstring += f.read(1).hex() | |||
mask_as_hexstring = "fffffffffffffffcfffffffffffffffffeffff" | |||
mask = int(mask_as_hexstring, 16) | |||
chunk = int(chunk_as_hexstring, 16) | |||
out_as_hexstring = hex(chunk & mask)[2:] | |||
sys.stdout.write(":arm:M::") | |||
print_out_hexstring(out_as_hexstring) | |||
sys.stdout.write(":") | |||
print_out_hexstring(mask_as_hexstring) | |||
sys.stdout.write(":/usr/local/bin/qemu-arm-wrapper:\n") | |||
}} |
Revision as of 08:23, February 15, 2019
Funtoo binfmt_misc Qemu chroot Guide: aka (Frankenroot)
qemu-arm.c
(C source code) - qemu arm wrapper/*
* Call QEMU binary with additional "-cpu cortex-a53" argument.
*
* Copyright (c) 2018 sakaki <sakaki@deciban.com>
* License: GPL v3.0+
*
* Based on code from the Gentoo Embedded Handbook
* ("General/Compiling_with_qemu_user_chroot")
*/
#include <string.h>
#include <unistd.h>
int main(int argc, char **argv, char **envp) {
char *newargv[argc + 3];
newargv[0] = argv[0];
newargv[1] = "-cpu";
newargv[2] = "cortex-a7";
memcpy(&newargv[3], &argv[1], sizeof(*argv) * (argc -1));
newargv[argc + 2] = NULL;
return execve("/usr/local/bin/qemu-arm", newargv, envp);
}
masky.py
(python source code) - masky#!/usr/bin/python3
import sys
import struct
import string
import codecs
printable_chars = set(string.printable)
printable_chars = set()
def print_out_hexstring(hexstring):
to_process = hexstring
while len(to_process):
ascii_value = chr(int(to_process[:2], 16))
to_process = to_process[2:]
if ascii_value in printable_chars:
sys.stdout.write(ascii_value)
else:
sys.stdout.write("\\x" + "{0:02x}".format(ord(ascii_value)))
chunk_as_hexstring = ""
with open(sys.argv[1], 'rb') as f:
for x in range(0,19):
chunk_as_hexstring += f.read(1).hex()
mask_as_hexstring = "fffffffffffffffcfffffffffffffffffeffff"
mask = int(mask_as_hexstring, 16)
chunk = int(chunk_as_hexstring, 16)
out_as_hexstring = hex(chunk & mask)[2:]
sys.stdout.write(":arm:M::")
print_out_hexstring(out_as_hexstring)
sys.stdout.write(":")
print_out_hexstring(mask_as_hexstring)
sys.stdout.write(":/usr/local/bin/qemu-arm-wrapper:\n")