C言語に機械語を埋め込む
環境
Windows10 1903
WSL1/Ubuntu 18.04.3 LTS
gcc 7.4.0
コード
#include<stdio.h> int reduce(int (*funcp)(int, int), int array[], size_t size, int acc){ if(size == 0){ return acc; }else{ return reduce(funcp, array + 1, size - 1, (*funcp)(acc, *array)); } } int main(void){ int array[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; __attribute__((section(".text"))) static unsigned char add[] = { 0x55, // push %rbp 0x48, 0x89, 0xe5, // mov %rsp, %rbp 0x89, 0x7d, 0xfc, // mov %edi, -0x4(%rbp) 0x89, 0x75, 0xf8, // mov %esi, -0x8(%rbp) 0x8b, 0x55, 0xfc, // mov -0x4(%rbp), %edx 0x8b, 0x45, 0xf8, // mov -0x8(%rbp), %eax 0x01, 0xd0, // add %edx, %eax 0x5d, // pop %rbp 0xc3 // retq }; printf("%d\n", reduce((int(*)(int, int))add, array, sizeof(array) / sizeof(array[0]), 0)); // => 55 return 0; }