package bap-primus-powerpc

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

Source file primus_powerpc_main.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
open Core_kernel
open Bap.Std
open Bap_primus.Std

include Self()

let () = Config.manpage [
    `S "DESCRIPTION";
    `P
      "Performs the PowerPC target specific setup. So far it just initializes
  all flags and CTR register to zero."
  ]

let () = Config.when_ready @@ fun _ ->
  let module Component(Machine : Primus.Machine.S) = struct
    open Machine.Syntax
    module Env = Primus.Env.Make(Machine)
    module Value = Primus.Value.Make(Machine)

    let initialize_regs regs =
      let zero = Primus.Generator.static 0 in
      Machine.List.iter regs ~f:(fun (r,s) ->
          let r = Var.create r (Type.imm s) in
          Env.add r zero)

    let init32 vars =
      initialize_regs vars

    let init () =
      Machine.get () >>= fun proj ->
      match Project.arch proj with
      | `ppc ->
        let regs = [
          "CTR", 32;
          "SO", 1;
          "CA", 1;
          "OV", 1;
          "CR0LT", 1;
          "CR0GT", 1;
          "CR0EQ", 1;
          "CA32", 1;
          "OV32", 1;
        ] in
        init32 regs
      | _ -> Machine.return ()

  end in
  Primus.Machine.add_component (module Component) [@warning "-D"];
  Primus.Components.register_generic "powerpc-init" (module Component)
    ~package:"bap"
    ~desc:"Initializes PPC registers."
OCaml

Innovation. Community. Security.