DynamoRIO / DynamoRIO/dynamorio

[Help want]May be bug in drwrap_skip_call on AArch64 centos Linux

Open
#3,774 23 comments 0 reactions 0 assignees View on GitHub
Dominant language
C
Stars
3.2k
Forks
629
Avg merge
2d 15h
Merged PRs (30d)
31

Description

I write a simple program , it dlopen libexif.so.12.3.3 , then call exif_data_new_from_data , this program work fine with dynamorio
```
./bin64/drrun -t drcov -- ~/c/poc/poc
```
then I write a client to wrap a log function (`exif_log`) on libexif. some abnormalities have occurred. It call exif_log normally several times, and then crash , because it access to inaccessible memory

The log
```
# ./bin64/drrun -c api/bin/libwrap.so -- ~/c/poc/poc
load module: poc on 0x0000000000400000
load module: libdynamorio.so on 0x0000000071000000
load module: libwrap.so on 0x0000000072000000
load module: linux-vdso.so.1 on 0x0000ffffa5426000
load module: ld-linux-aarch64.so.1 on 0x0000ffffa542b000
load module: libc.so.6 on 0x0000ffffa50ac000
load module: libdl.so.2 on 0x0000ffffa5232000
load module: libm.so.6 on 0x0000ffffa4f7a000
load module: libexif.so.12 on 0x0000ffffa504b000
log: 0x0000000000000000,ret:0x0000ffffa505dda4
log: 0x0000000000000000,ret:0x0000ffffa505e0ac
log: 0x0000000000000000,ret:0x0000ffffa505df1c
log: 0x0000000000000000,ret:0x0000ffffa505dfa4
log: 0x0000000000000000,ret:0x0000ffffa505cf20
log: 0x0000000000000000,ret:0x0000ffffa505d03c
exception pc: 0x0000ffffa5063900, access_addr:0x000000005474e064

```

the libexif code, just clone master , then compile it.
```
https://github.com/libexif/libexif
```

demo code:
```
#include
#include
#include
#include
#include
#include

unsigned char poc[1918] = {
0xFF, 0xD8, 0xFF, 0xE1, 0x07, 0x76, 0x45, 0x78, 0x69, 0x66, 0x00, 0x00, 0x49, 0x49, 0x2A, 0x00,
0x08, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x0F, 0x01, 0x02, 0x00, 0x13, 0x00, 0x00, 0x00, 0x92, 0x00,
0x00, 0x00, 0x10, 0x01, 0x02, 0x00, 0x12, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x00, 0x00, 0x12, 0x01,
0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1A, 0x01, 0x05, 0x00, 0x01, 0x00,
0x00, 0x00, 0xB8, 0x00, 0x00, 0x00, 0x1B, 0x01, 0x05, 0x00, 0x01, 0x00, 0x00, 0x00, 0xC0, 0x00,
0x00, 0x00, 0x28, 0x01, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x31, 0x01,
0x02, 0x00, 0x14, 0x00, 0x00, 0x00, 0xC8, 0x00, 0x00, 0x00, 0x32, 0x01, 0x02, 0x00, 0x14, 0x00,
0x00, 0x00, 0xDC, 0x00, 0x00, 0x00, 0x13, 0x02, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00,
0x00, 0x00, 0x69, 0x87, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x4E, 0x01, 0x00, 0x00, 0xA5, 0xC4,
0x07, 0x00, 0x5E, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x08, 0x07, 0x00, 0x00, 0x50, 0x45,
0x4E, 0x54, 0x41, 0x58, 0x20, 0x43, 0x6F, 0x72, 0x70, 0x6F, 0x72, 0x61, 0x74, 0x69, 0x6F, 0x6E,
0x00, 0x00, 0x50, 0x45, 0x4E, 0x54, 0x41, 0x58, 0x20, 0x4F, 0x70, 0x74, 0x69, 0x6F, 0x20, 0x37,
0x35, 0x30, 0x5A, 0x00, 0x48, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x4F, 0x70, 0x74, 0x69, 0x6F, 0x20, 0x37, 0x35, 0x30, 0x5A, 0x20, 0x56,
0x65, 0x72, 0x20, 0x31, 0x2E, 0x30, 0x31, 0x00, 0x32, 0x30, 0x30, 0x39, 0x3A, 0x31, 0x30, 0x3A,
0x31, 0x31, 0x20, 0x31, 0x39, 0x3A, 0x30, 0x36, 0x3A, 0x30, 0x34, 0x00, 0x50, 0x72, 0x69, 0x6E,
0x74, 0x49, 0x4D, 0x00, 0x30, 0x33, 0x30, 0x30, 0x00, 0x00, 0x0D, 0x00, 0x01, 0x00, 0x16, 0x00,
0x16, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
0x10, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00,
0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x05, 0x00, 0x00, 0x00, 0x01, 0x03,
0x01, 0x00, 0x00, 0x00, 0x10, 0x03, 0x80, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x9A, 0x82, 0x05, 0x00,
0x01, 0x00, 0x00, 0x00, 0xB0, 0x02, 0x00, 0x00, 0x9D, 0x82, 0x05, 0x00, 0x01, 0x00, 0x00, 0x00,
0xB8, 0x02, 0x00, 0x00, 0x27, 0x88, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0xC8, 0x00, 0x00, 0x00,
0x00, 0x90, 0x07, 0x00, 0x04, 0x00, 0x00, 0x00, 0x30, 0x32, 0x32, 0x30, 0x03, 0x90, 0x02, 0x00,
0x14, 0x00, 0x00, 0x00, 0xC0, 0x02, 0x00, 0x00, 0x04, 0x90, 0x02, 0x00, 0x14, 0x00, 0x00, 0x00,
0xD4, 0x02, 0x00, 0x00, 0x01, 0x91, 0x07, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x00,
0x02, 0x91, 0x05, 0x00, 0x01, 0x00, 0x00, 0x00, 0xE8, 0x02, 0x00, 0x00, 0x04, 0x92, 0x0A, 0x00,
0x01, 0x00, 0x00, 0x00, 0xF0, 0x02, 0x00, 0x00, 0x05, 0x92, 0x05, 0x00, 0x01, 0x00, 0x00, 0x00,
0xF8, 0x02, 0x00, 0x00, 0x07, 0x92, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
0x09, 0x92, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x0A, 0x92, 0x05, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x7C, 0x92, 0x07, 0x00, 0xDA, 0x03, 0x00, 0x00,
0x08, 0x03, 0x00, 0x00, 0x00, 0xA0, 0x07, 0x00, 0x04, 0x00, 0x00, 0x00, 0x30, 0x31, 0x30, 0x30,
0x01, 0xA0, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0xA0, 0x04, 0x00,
0x01, 0x00, 0x00, 0x00, 0x80, 0x02, 0x00, 0x00, 0x03, 0xA0, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00,
0xE0, 0x01, 0x00, 0x00, 0x05, 0xA0, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0xEA, 0x06, 0x00, 0x00,
0x01, 0xA4, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0xA4, 0x03, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xA4, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x04, 0xA4, 0x05, 0x00, 0x01, 0x00, 0x00, 0x00, 0xE2, 0x06, 0x00, 0x00,
0x05, 0xA4, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x06, 0xA4, 0x03, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xA4, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x09, 0xA4, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0A, 0xA4, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0xA4, 0x03, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00,
0x64, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x32, 0x30, 0x30, 0x39,
0x3A, 0x31, 0x30, 0x3A, 0x31, 0x31, 0x20, 0x31, 0x39, 0x3A, 0x30, 0x36, 0x3A, 0x30, 0x34, 0x00,
0x32, 0x30, 0x30, 0x39, 0x3A, 0x31, 0x30, 0x3A, 0x31, 0x31, 0x20, 0x31, 0x39, 0x3A, 0x30, 0x36,
0x3A, 0x30, 0x34, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0A, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x00, 0x00,
0x0A, 0x00, 0x00, 0x00, 0x41, 0x4F, 0x43, 0x00, 0x49, 0x49, 0x28, 0x00, 0x01, 0x00, 0x03, 0x00,
0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x03, 0x00, 0x02, 0x00, 0x00, 0x00,
0x80, 0x02, 0xE0, 0x01, 0x03, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x6A, 0x07, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00,
0x01, 0x00, 0x00, 0x00, 0x66, 0x2A, 0x01, 0x00, 0x06, 0x00, 0x07, 0x00, 0x04, 0x00, 0x00, 0x00,
0x07, 0xD9, 0x0A, 0x0B, 0x07, 0x00, 0x07, 0x00, 0x03, 0x00, 0x00, 0x00, 0x13, 0x06, 0x04, 0x00,
0x08, 0x00, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x03, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00,
0x15, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x0D, 0x00, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x03, 0x00,
0x01, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x0F, 0x00, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0xF5, 0x03, 0x00, 0x00,
0x12, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0xA0, 0x86, 0x01, 0x00, 0x13, 0x00, 0x03, 0x00,
0x01, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x14, 0x00, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00,
0x09, 0x00, 0x00, 0x00, 0x15, 0x00, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x00, 0x00,
0x16, 0x00, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x17, 0x00, 0x03, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1B, 0x00, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x03, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00,
0x4E, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00,
0x1F, 0x00, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x03, 0x00,
0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x22, 0x00, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x23, 0x00, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x24, 0x00, 0x03, 0x00,
0x01, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x25, 0x00, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x26, 0x00, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x27, 0x00, 0x07, 0x00, 0x04, 0x00, 0x00, 0x00, 0xFE, 0xFD, 0xFF, 0xFF, 0x29, 0x00, 0x04, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x07, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xFE, 0x03, 0x07, 0x00, 0xEE, 0x01, 0x00, 0x00, 0x10, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xE9, 0x02, 0x01, 0x03, 0x0E, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x01, 0x00, 0x00, 0x19, 0x61,
0x12, 0x31, 0x00, 0x00, 0x41, 0x2B, 0x00, 0x00, 0x00, 0x24, 0x00, 0x3B, 0x6A, 0x28, 0x00, 0xED,
0xA8, 0x00, 0x00, 0x0F, 0x42, 0x40, 0x00, 0x03, 0xD0, 0xA1, 0x00, 0x0F, 0x42, 0x40, 0x00, 0xFA,
0x01, 0xAD, 0x00, 0xC8, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x01,
0x00, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x47, 0x06, 0x17, 0x0C, 0x00, 0x02,
0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x32, 0x26, 0xDE, 0x00, 0xFA, 0x82, 0x56, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x11, 0x11, 0x01, 0x23, 0x03, 0xE4, 0x03, 0xD5,
0x01, 0x23, 0x02, 0x00, 0x01, 0x6B, 0x02, 0x03, 0x02, 0x01, 0x01, 0x00, 0xD0, 0x5B, 0x00, 0x02,
0x03, 0x52, 0x00, 0x14, 0x00, 0x42, 0x00, 0x14, 0x00, 0x42, 0x00, 0x0A, 0x00, 0x78, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x91,
0x01, 0x5F, 0x02, 0x55, 0x03, 0x28, 0x03, 0xB7, 0x0F, 0x0F, 0x00, 0xE9, 0x02, 0x01, 0x03, 0x0E,
0x00, 0x00, 0x08, 0xED, 0x0B, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88,
0xF0, 0x01, 0x03, 0xF5, 0x00, 0x00, 0x64, 0x10, 0x00, 0x00, 0x00, 0x00, 0x07, 0xC4, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x04, 0x04, 0x36, 0x03, 0xC8, 0x84, 0x36,
0x00, 0x0A, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00,
0x03, 0xF5, 0x11, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x77,
0x77, 0x77, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x1C, 0x10, 0x1F, 0x0E, 0x15, 0x00, 0x00, 0xFF, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x0F, 0x42, 0x40, 0x63, 0x00,
0x00, 0x64, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x01, 0x6B, 0x02, 0x03, 0x2F, 0x14,
0xFC, 0x44, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x6B, 0x02, 0x03, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00,
0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00,
0x52, 0x39, 0x38, 0x00, 0x02, 0x00, 0x07, 0x00, 0x04, 0x00, 0x00, 0x00, 0x30, 0x31, 0x30, 0x30,
0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x03, 0x01, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00,
0x00, 0x00, 0x1A, 0x01, 0x05, 0x00, 0x01, 0x00, 0x00, 0x00, 0x56, 0x07, 0x00, 0x00, 0x1B, 0x01,
0x05, 0x00, 0x01, 0x00, 0x00, 0x00, 0x5E, 0x07, 0x00, 0x00, 0x28, 0x01, 0x03, 0x00, 0x01, 0x00,
0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x66, 0x07,
0x00, 0x00, 0x02, 0x02, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x01, 0x00,
0x00, 0x00, 0xFF, 0xD8, 0xFF, 0xD9, 0xFF, 0xD8, 0xFF, 0xD9, 0xFF, 0xD8, 0xFF, 0xD9
};

// gcc poc.c -o poc -ldl -rdynamic
typedef void* (*exif_data_new_from_data)(unsigned char *buf, int size);
exif_data_new_from_data target_func = NULL;
void init()
{
void *handle;
handle = dlopen("/root/libexif-master/libexif/.libs/libexif.so.12.3.3", 1);
if(handle == NULL)
{

printf("dlopen failed %s\n", dlerror());
exit(0);
}
target_func = (exif_data_new_from_data)dlsym(handle, "exif_data_new_from_data");
if (target_func == NULL)
{
exit(0);
}
}

int main(){
init();
target_func(poc, 1918);
}
```

client code
```
#include "dr_api.h"
#include "drmgr.h"
#include "drwrap.h"
#include "drsyms.h"
#include "dr_tools.h"
#include
#include
#include
#include
#include
static void
event_exit(void);

void pre_exif_log(void *wrapcxt, INOUT void **user_data)
{

app_pc ret = drwrap_get_retaddr(wrapcxt);
void * p = drwrap_get_arg(wrapcxt, 0);
dr_printf("log: %p,ret:%p\n", p, ret);
drwrap_skip_call(wrapcxt, p, 0);
}

static void
module_load_event(void *drcontext, const module_data_t *mod, bool loaded)
{
const char *module_name = dr_module_preferred_name(mod);
dr_fprintf(STDERR, "load module: %s on %p\n", module_name, mod->start);

if (module_name[0] == 'l' && module_name[1] == 'i' && module_name[2] == 'b' && module_name[3] == 'e' && module_name[4] == 'x')
{
// exif_log
drwrap_wrap(mod->start + 0x017B28, pre_exif_log, NULL);
}

}

dr_signal_action_t
onexception (void *drcontext, dr_siginfo_t *siginfo)
{

if( siginfo->sig == SIGILL ||
siginfo->sig == SIGBUS ||
siginfo->sig == SIGFPE ||
siginfo->sig == SIGSEGV ||
siginfo->sig == SIGABRT )
{
void* access_addr = NULL;
bool bAccessMemory = (siginfo->sig == SIGBUS || siginfo->sig == SIGSEGV);
if(bAccessMemory)
{
access_addr = siginfo->access_address;
}
dr_printf("exception pc: %p, access_addr:%p\n",siginfo->mcontext->pc, access_addr);
dr_exit_process(1);
}

return DR_SIGNAL_DELIVER;//return normal
}

DR_EXPORT void
dr_client_main(client_id_t id, int argc, const char *argv[])
{
dr_set_client_name("DynamoRIO Sample Client 'wrap'", "http://dynamorio.org/issues");
/* make it easy to tell, by looking at log file, which client executed */
dr_log(NULL, DR_LOG_ALL, 1, "Client 'wrap' initializing\n");
/* also give notification to stderr */
drmgr_init();
drwrap_init();
dr_register_exit_event(event_exit);
drmgr_register_module_load_event(module_load_event);
drmgr_register_signal_event(onexception);

}

static void
event_exit(void)
{
drwrap_exit();
drmgr_exit();
}

```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.