1
1
#include "libafl/tcg.h"
2
2
#include "libafl/hooks/tcg/block.h"
3
3
4
- struct libafl_block_hook * libafl_block_hooks ;
5
- size_t libafl_block_hooks_num = 0 ;
4
+ static struct libafl_block_hook * libafl_block_hooks ;
5
+ static size_t libafl_block_hooks_num = 0 ;
6
6
7
7
static TCGHelperInfo libafl_exec_block_hook_info = {
8
8
.func = NULL ,
@@ -13,68 +13,64 @@ static TCGHelperInfo libafl_exec_block_hook_info = {
13
13
14
14
GEN_REMOVE_HOOK (block )
15
15
16
- size_t libafl_add_block_hook (uint64_t (* gen )(uint64_t data , target_ulong pc ),
17
- void (* post_gen )(uint64_t data , target_ulong pc ,
18
- target_ulong block_length ),
19
- void (* exec )(uint64_t data , uint64_t id ),
20
- uint64_t data )
16
+ size_t libafl_add_block_hook (libafl_block_pre_gen_cb pre_gen_cb ,
17
+ libafl_block_post_gen_cb post_gen_cb ,
18
+ libafl_block_exec_cb exec_cb , uint64_t data )
21
19
{
22
20
CPUState * cpu ;
23
21
CPU_FOREACH (cpu ) { tb_flush (cpu ); }
24
22
25
23
struct libafl_block_hook * hook =
26
24
calloc (sizeof (struct libafl_block_hook ), 1 );
27
- hook -> gen = gen ;
28
- hook -> post_gen = post_gen ;
29
- // hook->exec = exec;
25
+ hook -> pre_gen_cb = pre_gen_cb ;
26
+ hook -> post_gen_cb = post_gen_cb ;
30
27
hook -> data = data ;
31
28
hook -> num = libafl_block_hooks_num ++ ;
32
29
hook -> next = libafl_block_hooks ;
33
30
libafl_block_hooks = hook ;
34
31
35
- if (exec ) {
32
+ if (exec_cb ) {
36
33
memcpy (& hook -> helper_info , & libafl_exec_block_hook_info ,
37
34
sizeof (TCGHelperInfo ));
38
- hook -> helper_info .func = exec ;
35
+ hook -> helper_info .func = exec_cb ;
39
36
}
40
37
41
38
return hook -> num ;
42
39
}
43
40
44
- bool libafl_qemu_block_hook_set_jit (size_t num ,
45
- size_t (* jit )(uint64_t data , uint64_t id ))
41
+ bool libafl_qemu_block_hook_set_jit (size_t num , libafl_block_jit_cb jit_cb )
46
42
{
47
43
struct libafl_block_hook * hk = libafl_block_hooks ;
48
44
while (hk ) {
49
45
if (hk -> num == num ) {
50
- hk -> jit = jit ;
46
+ hk -> jit_cb = jit_cb ;
51
47
return true;
52
- } else {
53
- hk = hk -> next ;
54
48
}
49
+
50
+ hk = hk -> next ;
55
51
}
56
52
return false;
57
53
}
58
54
59
- void libafl_qemu_hook_block_post_gen (TranslationBlock * tb , vaddr pc )
55
+ void libafl_qemu_hook_block_post_run (TranslationBlock * tb , vaddr pc )
60
56
{
61
57
struct libafl_block_hook * hook = libafl_block_hooks ;
62
58
while (hook ) {
63
- if (hook -> post_gen )
64
- hook -> post_gen (hook -> data , pc , tb -> size );
59
+ if (hook -> post_gen_cb )
60
+ hook -> post_gen_cb (hook -> data , pc , tb -> size );
65
61
hook = hook -> next ;
66
62
}
67
63
}
68
64
69
- void libafl_qemu_hook_block_run (target_ulong pc )
65
+ void libafl_qemu_hook_block_pre_run (target_ulong pc )
70
66
{
71
67
struct libafl_block_hook * hook = libafl_block_hooks ;
72
68
73
69
while (hook ) {
74
70
uint64_t cur_id = 0 ;
75
71
76
- if (hook -> gen ) {
77
- cur_id = hook -> gen (hook -> data , pc );
72
+ if (hook -> pre_gen_cb ) {
73
+ cur_id = hook -> pre_gen_cb (hook -> data , pc );
78
74
}
79
75
80
76
if (cur_id != (uint64_t )-1 && hook -> helper_info .func ) {
@@ -87,8 +83,8 @@ void libafl_qemu_hook_block_run(target_ulong pc)
87
83
tcg_temp_free_i64 (tmp1 );
88
84
}
89
85
90
- if (cur_id != (uint64_t )-1 && hook -> jit ) {
91
- hook -> jit (hook -> data , cur_id );
86
+ if (cur_id != (uint64_t )-1 && hook -> jit_cb ) {
87
+ hook -> jit_cb (hook -> data , cur_id );
92
88
}
93
89
94
90
hook = hook -> next ;
0 commit comments