export declare class R2PipeSyncFromSync {
    r2p: R2Pipe;
    constructor(r2p: R2Pipe);
    /**
     * Run a command in the associated instance of radare2 and return the output as a string
     *
     * @param {string} command to be executed inside radare2.
     * @returns {string} The output of the command execution
     */
    cmd(command: string): string;
    cmdAt(command: string, address: number | string | any): string;
    cmdj(cmd: string): any;
    call(command: string): string;
    callj(cmd: string): any;
    callAt(command: string, address: number | string | any): string;
    log(msg: string): void;
    plugin(type: string, maker: any): boolean;
    unload(type: string, name: string): boolean;
}
export declare function newAsyncR2PipeFromSync(r2p: R2Pipe): R2PipeSync;
/**
 * Generic interface to interact with radare2, abstracts the access to the associated
 * instance of the tool, which could be native via rlang or remote via pipes or tcp/http.
 *
 * @typedef R2Pipe
 */
export interface R2Pipe {
    /**
     * Run a command in the associated instance of radare2 and return the output as a string
     *
     * @param {string} command to be executed inside radare2.
     * @returns {string} The output of the command execution
     */
    cmd(cmd: string): string;
    /**
     * Run a radare2 command in a different address. Same as `.cmd(x + '@ ' + a)`
     *
     * @param {string} command to be executed inside radare2.
     * @param {number|string|NativePointer} command to be executed inside radare2.
     * @returns {string} The output of the command execution
     */
    cmdAt(cmd: string, address: number | string | any): string;
    /**
     * Run a radare2 command expecting the output to be JSON
     *
     * @param {string} command to be executed inside radare2. The given command should end with `j`
     * @returns {object} the JSON decoded object from the output of the command
     */
    cmdj(cmd: string): any;
    /**
     * Call a radare2 command. This is similar to `R2Pipe.cmd`, but skips all the command parsing rules,
     * which is safer and faster but you cannot use any special modifier like `@`, `~`, ...
     *
     * See R2Pipe.callAt() to call a command on a different address
     *
     * @param {string} command to be executed inside radare2. The given command should end with `j`
     * @returns {object} the JSON decoded object from the output of the command
     */
    call(cmd: string): string;
    /**
     * Call a radare2 command in a different address
     *
     * @param {string} command to be executed inside radare2. The given command should end with `j`
     * @param {NativePointer|string|number} where to seek to execute this command (previous offset is restored after executing it)
     * @returns {string} the string containing the output of the command
     */
    callAt(cmd: string, address: string | number | any): string;
    /**
     * Same as cmdj but using .call which avoids command injection problems
     *
     * @param {string} command to be executed inside radare2. The given command should end with `j`
     * @returns {object} the JSON decoded object from the command output
     */
    callj(cmd: string): any;
    /**
     * Log a string to the associated console. This is used internally by `console.log` in some implementations.
     *
     * @param {string} text to be displayed
     */
    log(msg: string): void;
    /**
     * Instantiate a new radare2 plugin with the given type and constructor method.
     *
     * @param {string} type of plugin ("core", "io", "arch", ...)
     * @param {string} function that returns the plugin definition
     * @returns {boolean} true if successful
     */
    plugin(type: string, maker: any): boolean;
    /**
     * Unload the plugin associated with a `type` and a `name`.
     *
     * @param {string} type of plugin ("core", "io", "arch", ...)
     * @param {string} name of the plugin
     * @returns {boolean} true if successful
     */
    unload(type: string, name: string): boolean;
}
/**
 * Generic interface to interact with radare2, abstracts the access to the associated
 * instance of the tool, which could be native via rlang or remote via pipes or tcp/http.
 *
 * @typedef R2PipeSync
 */
export interface R2PipeSync {
    /**
     * Run a command in the associated instance of radare2
     *
     * @param {string} command to be executed inside radare2.
     * @returns {string} The output of the command execution
     */
    cmd(cmd: string): string;
    /**
     * Run a radare2 command in a different address. Same as `.cmd(x + '@ ' + a)`
     *
     * @param {string} command to be executed inside radare2.
     * @param {number|string|NativePointer} command to be executed inside radare2.
     * @returns {string} The output of the command execution
     */
    cmdAt(cmd: string, address: number | string | any): string;
    /**
     * Run a radare2 command expecting the output to be JSON
     *
     * @param {string} command to be executed inside radare2. The given command should end with `j`
     * @returns {object} the JSON decoded object from the output of the command
     */
    cmdj(cmd: string): any;
    /**
     * Call a radare2 command. This is similar to `R2Pipe.cmd`, but skips all the command parsing rules,
     * which is safer and faster but you cannot use any special modifier like `@`, `~`, ...
     *
     * See R2Pipe.callAt() to call a command on a different address
     *
     * @param {string} command to be executed inside radare2. The given command should end with `j`
     * @returns {object} the JSON decoded object from the output of the command
     */
    call(cmd: string): string;
    /**
     * Call a radare2 command in a different address
     *
     * @param {string} command to be executed inside radare2. The given command should end with `j`
     * @param {NativePointer|string|number} where to seek to execute this command (previous offset is restored after executing it)
     * @returns {string} the string containing the output of the command
     */
    callAt(cmd: string, address: string | number | any): string;
    /**
     * Same as cmdj but using .call which avoids command injection problems
     *
     * @param {string} command to be executed inside radare2. The given command should end with `j`
     * @returns {object} the JSON decoded object from the command output
     */
    callj(cmd: string): any;
    /**
     * Log a string to the associated console. This is used internally by `console.log` in some implementations.
     *
     * @param {string} text to be displayed
     */
    log(msg: string): void;
    /**
     * Instantiate a new radare2 plugin with the given type and constructor method.
     *
     * @param {string} type of plugin ("core", "io", "arch", ...)
     * @param {string} function that returns the plugin definition
     * @returns {boolean} true if successful
     */
    plugin(type: string, maker: any): boolean;
    /**
     * Unload the plugin associated with a `type` and a `name`.
     *
     * @param {string} type of plugin ("core", "io", "arch", ...)
     * @param {string} name of the plugin
     * @returns {boolean} true if successful
     */
    unload(type: string, name: string): boolean;
}
/**
 * A global instance of R2Pipe associated with the current instance of radare2
 *
 * @type {R2PipeSync}
 */
export declare const r2: R2Pipe;
