@@ -235,6 +235,8 @@ where
235
235
block_hook : UcHookId ,
236
236
/// Stored for deleting hook when dropping
237
237
sub_hook : UcHookId ,
238
+ /// Stored for deleting hook when dropping
239
+ cmp_hook : UcHookId ,
238
240
dumb_ob : tuple_list_type ! ( ValueObserver <' static , bool >) ,
239
241
}
240
242
@@ -274,15 +276,28 @@ where
274
276
let sub_hook = uc
275
277
. add_tcg_hook (
276
278
TcgOpCode :: SUB ,
277
- TcgOpFlag :: CMP | TcgOpFlag :: DIRECT ,
279
+ TcgOpFlag :: DIRECT ,
280
+ 1 ,
281
+ 0 ,
282
+ |uc, address, arg1, arg2, size| {
283
+ hook_opcode_cmpcov ( uc, address, arg1, arg2, size) ;
284
+ } ,
285
+ )
286
+ . inspect_err ( |ret| {
287
+ warn ! ( "Fail to add sub hooks due to {ret:?}" ) ;
288
+ } ) ?;
289
+ let cmp_hook = uc
290
+ . add_tcg_hook (
291
+ TcgOpCode :: SUB ,
292
+ TcgOpFlag :: CMP ,
278
293
1 ,
279
294
0 ,
280
295
|uc, address, arg1, arg2, size| {
281
296
hook_opcode_cmpcov ( uc, address, arg1, arg2, size) ;
282
297
} ,
283
298
)
284
299
. inspect_err ( |ret| {
285
- warn ! ( "Fail to add cmp and sub hooks due to {ret:?}" ) ;
300
+ warn ! ( "Fail to add cmp hooks due to {ret:?}" ) ;
286
301
} ) ?;
287
302
288
303
Ok ( Self {
@@ -293,6 +308,7 @@ where
293
308
always_validate,
294
309
block_hook,
295
310
sub_hook,
311
+ cmp_hook,
296
312
dumb_ob : tuple_list ! ( ValueObserver :: new( "dumb_ob" , OwnedRef :: Owned ( false . into( ) ) ) ) ,
297
313
} )
298
314
}
@@ -329,7 +345,10 @@ where
329
345
warn ! ( "Fail to uninstall block hook due to {ret:?}" ) ;
330
346
}
331
347
if let Err ( ret) = self . uc . remove_hook ( self . sub_hook ) {
332
- warn ! ( "Fail to uninstall cmp and sub tcg opcode hook due to {ret:?}" ) ;
348
+ warn ! ( "Fail to uninstall sub tcg opcode hook due to {ret:?}" ) ;
349
+ }
350
+ if let Err ( ret) = self . uc . remove_hook ( self . cmp_hook ) {
351
+ warn ! ( "Fail to uninstall cmp tcg opcode hook due to {ret:?}" ) ;
333
352
}
334
353
}
335
354
}
0 commit comments