The first portion of any ELF file is the ELF header. This generally provides offsets to other headers (program headers and section headers) within an ELF.
typedef struct {
unsigned char e_ident[EI_NIDENT];
uint16_t e_type;
# source:http://reocities.com/SiliconValley/heights/7052/opcode.txt | |
From: mark@omnifest.uwm.edu (Mark Hopkins) | |
Newsgroups: alt.lang.asm | |
Subject: A Summary of the 80486 Opcodes and Instructions | |
(1) The 80x86 is an Octal Machine | |
This is a follow-up and revision of an article posted in alt.lang.asm on | |
7-5-92 concerning the 80x86 instruction encoding. | |
The only proper way to understand 80x86 coding is to realize that ALL 80x86 |
# source:http://geocities.com/SiliconValley/heights/7052/opcode.txt | |
From: mark@omnifest.uwm.edu (Mark Hopkins) | |
Newsgroups: alt.lang.asm | |
Subject: A Summary of the 80486 Opcodes and Instructions | |
(1) The 80x86 is an Octal Machine | |
This is a follow-up and revision of an article posted in alt.lang.asm on | |
7-5-92 concerning the 80x86 instruction encoding. | |
The only proper way to understand 80x86 coding is to realize that ALL 80x86 |
# - Check glibc version | |
# CHECK_GLIBC_VERSION() | |
# | |
# Once done this will define | |
# | |
# GLIBC_VERSION - glibc version | |
# | |
MACRO (CHECK_GLIBC_VERSION) | |
EXECUTE_PROCESS ( | |
COMMAND ${CMAKE_C_COMPILER} -print-file-name=libc.so.6 |
This approach uses update-alternatives to manage GCC and LLVM/CLANG C/C++ compiler toolchains.
Although tested on Linux Mint 18.3, this approach should work on any Debian based distro or for that matter any Linux distro with update-alternatives
support, provided the packages are installed correctly.
There are 3 files
gcc-alternatives.sh
installs GCC versions 5/6/7 and sets up alternatives for gcc
/g++
/cpp
/gfortran
.llvm-clang-alternatives.sh
installs LLVM and CLANG versions 4/5 and sets up alternatives for various LLVM and CLANG programs including clang
and clang++
.cc-alternatives.sh
sets up alternatives for the cc
, cxx
, and the ld
commands. This script can be used to change systemwide default compiler/linker combination to either GCC or CLANG.Once these scripts are run you can change the system GCC/CLANG versions by running sudo update-alternatives --config gcc|clang
. To change the default compiler/linker combo used by t
I recently happened upon a very interesting implementation of popen()
(different API, same idea) called popen-noshell using clone(2)
, and so I opened an issue requesting use of vfork(2)
or posix_spawn()
for portability. It turns out that on Linux there's an important advantage to using clone(2)
. I think I should capture the things I wrote there in a better place. A gist, a blog, whatever.
This is not a paper. I assume reader familiarity with
fork()
in particular and Unix in general, though, of course, I link to relevant wiki pages, so if the unfamiliar reader is willing to go down the rabbit hole, they should be able to come ou
#include <sys/mman.h> | |
#include <sys/types.h> | |
#include <sys/stat.h> | |
#include <unistd.h> | |
#include <fcntl.h> | |
#include <string.h> | |
#include <stdio.h> | |
#include <errno.h> | |
#include <elf.h> |
There is sometimes a situation in which one needs to get the relative offset of a structure field, common examples of this include serialization frameworks which aid to serialize objects, vertex attributes for rendering (D3D, GL.), etc.
The most common technique for getting this information is through the offsetof
macro defined in stddef.h
. Unfortunately using the macro in C++ comes with a
new set of restrictions that prevent some (subjectively valid) uses of it.
section .text | |
global _start | |
_start: | |
xor eax, eax ; init eax 0 | |
xor ebx, ebx ; init ebx 0 | |
xor esi, esi ; init esi 0 | |
jmp _socket ; jmp to _socket | |
_socket_call: |
#! /bin/bash | |
GCC_VERSION="5.2.0" | |
WORKDIR="$HOME/src/" | |
INSTALLDIR="/platform" | |
## NOTE: XCode must be installed (through App Store) and the following run to install command-line tools. | |
## THIS IS IMPORTANT! Among other things, it creates '/usr/include' and installs the system header files. | |
# xcode-select --install |