Challenge 1: Convert hex to base64
use std::str; extern crate base64;
|GOBIN = r"C:\Program Files\Go"|
|GOBIN = r"C:\Program Files\Go\bin"|
|sp = func_name.split(".")|
|# if the start of a function is not upper case it is not exportable|
|file_name = ""|
|logging.debug("BinaryNinja has been imported")|
|DEBUG = True|
|SEGMENT = True|
Rather than relying on garbage collection or user memory allocation (via allocate/free memory), Rust relys on the compiler to ensure memory is managed through ownership.
Ownership is a set of rules that governs how a Rust program manages memory.
Ownership helps with organizing how data is stored in the heap, minimizing duplication of data in the heap and cleaning up the heap. Data types (e.g. Scalar types) are not stored in the heap. Data types (e.g. integers) can be easily pushed/stored and popped/removed on the stack. Rust enforces single ownership.
In computer programming, an opaque predicate is a predicate—an expression that evaluates to either "true" or "false"—for which the outcome is known by the programmer a priori, but which, for a variety of reasons, still needs to be evaluated at run time
Rust has kind of a steep learning curve but fortunately the Rust community has created some amazing resources for it. The approach I have taken is an iterative one using the following five resorces.
|mostly stolen from https://github.com/idapython/ examples/ex_actions.py|
|def __init__(self, passed):|
|Described in [PE-COFF] 5.4. Coff Symbol Table|
|_pack_ = 1|
|_fields_ = [|
|("zeroes", ctypes.c_uint), ("offset", ctypes.c_uint), ("value", ctypes.c_uint),|
|("section_number", ctypes.c_short), ("type", ctypes.c_ushort), ("storage_class", ctypes.c_ubyte),|