linker --wrap symbol
konsep wrap linker compiler ini sebenernya berguna ketika kita ingin menimpa suatu fungsi, ke fungsi yang kita map sendiri. contoh misal saya ada
printf()
ketika saya compile dengan gcc, printf akan dipanggil sebagai
__wrap_printf()
nah, dengan trick ini, kita bisa mengubah behavior dari printf nya itu sendiri, misal
- kirim ke uart
- kirim ke swdclk
PoC
#include <stdlib.h>
#include <stdio.h>
void* __real_malloc(size_t __size) {
// return malloc(__size);
printf("do?\n");
}
void* __wrap_malloc(size_t __size) {
printf("wrap malloc called\n");
return __real_malloc(__size);
}
int main() {
char* x = malloc(1);
// free(x);
}
lalu compile dengan gcc -Wl,--wrap=malloc wrap_malloc.c -o p -g
hasil hexdump main
0000000000001180 <main>:
1180: 55 push %rbp
1181: 48 89 e5 mov %rsp,%rbp
1184: 48 83 ec 10 sub $0x10,%rsp
1188: bf 01 00 00 00 mov $0x1,%edi
118d: e8 c5 ff ff ff call 1157 <__wrap_malloc>
1192: 48 89 45 f8 mov %rax,-0x8(%rbp)
1196: b8 00 00 00 00 mov $0x0,%eax
119b: c9 leave
119c: c3 ret