package binsec

  1. Overview
  2. Docs
Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source

Source file opt.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
open Types

module Flags : Exec.PLUGIN = struct
  let name = "sse-kill-flags-at-return"
  let grammar_extension = []
  let instruction_printer = None
  let declaration_printer = None

  let extension :
      type a b.
      (module EXPLORATION_STATISTICS) ->
      (module Path.S with type t = a) ->
      (module STATE with type t = b) ->
      (module Exec.EXTENSION with type path = a and type state = b) option =
   fun _stats path state ->
    let shordlived_flags = Isa_helper.get_shortlived_flags () in
    if shordlived_flags <> [] && Options.KillFlagsAtReturn.get () then
      Some
        (module struct
          module P = (val path)
          module S = (val state)

          type path = P.t
          and state = S.t

          let initialization_callback = None
          let declaration_callback = None
          let instruction_callback = None

          let process_handler :
              type a. (module Ir.GRAPH with type t = a) -> a -> unit =
           fun graph ->
            let module G = (val graph) in
            fun graph ->
              G.iter_exits
                (fun vertex ->
                  if G.is_new_vertex graph vertex then
                    match G.node graph vertex with
                    | Goto { tag = Return; _ }
                    | Terminator (Jump { tag = Return; _ }) ->
                        List.iter
                          (fun var ->
                            ignore (G.insert_before graph vertex (Forget var)))
                          shordlived_flags
                    | _ -> ())
                graph

          let process_callback = Some process_handler
          let builtin_callback = None
          let builtin_printer = None
          let at_exit_callback = None
        end)
    else None
end

let () = Exec.register_plugin (module Flags)
OCaml

Innovation. Community. Security.