|
IDA SDK
|
File I/O functions for IDA.
You should not use standard C file I/O functions in modules. Use functions from this header, pro.h and fpro.h instead.
This file also declares a call_system() function.
Classes | |
| struct | file_enumerator_t |
| Enumerate files in the specified directory. More... | |
| struct | ioport_bit_t |
| Describes an I/O port bit. More... | |
| struct | ioport_t |
| Describes an I/O port. More... | |
| struct | ioports_fallback_t |
| Read i/o port definitions from a config file. More... | |
| struct | choose_ioport_parser_t |
| struct | generic_linput_t |
| Generic linput class - may be used to create a linput_t instance for any data source. More... | |
| class | linput_buffer_t |
| Helper class - adapts linput to be used in extract_... functions as a data supplier (see kernwin.hpp) More... | |
Functions | |
| idaman THREAD_SAFE const char *ida_export | idadir (const char *subdir) |
| Get IDA directory (if subdir==nullptr) or the specified subdirectory (see IDA subdirectories) | |
| idaman THREAD_SAFE char *ida_export | getsysfile (char *buf, size_t bufsize, const char *filename, const char *subdir) |
| Search for IDA system file. More... | |
| idaman THREAD_SAFE const char *ida_export | get_user_idadir (void) |
| Get user ida related directory. More... | |
| idaman THREAD_SAFE int ida_export | get_ida_subdirs (qstrvec_t *dirs, const char *subdir, int flags=0) |
| Get list of directories in which to find a specific IDA resource (see IDA subdirectories). More... | |
| idaman THREAD_SAFE bool ida_export | get_special_folder (char *buf, size_t bufsize, int csidl) |
| Get a folder location by CSIDL (see Common CSIDLs). More... | |
| idaman THREAD_SAFE int ida_export | enumerate_files (char *answer, size_t answer_size, const char *path, const char *fname, file_enumerator_t &fv) |
| idaman THREAD_SAFE void ida_export | echsize (FILE *fp, uint64 size) |
| Change size of file or die. More... | |
| idaman THREAD_SAFE uint64 ida_export | get_free_disk_space (const char *path) |
| Get free disk space in bytes. More... | |
| idaman THREAD_SAFE ssize_t ida_export | read_ioports (ioports_t *ports, qstring *device, const char *file, ioports_fallback_t *callback=nullptr) |
| idaman THREAD_SAFE bool ida_export | choose_ioport_device (qstring *_device, const char *file, const char *(idaapi *parse_params)(qstring *buf, const char *line)=nullptr) |
| Allow the user to choose the ioport device. More... | |
| idaman THREAD_SAFE bool ida_export | choose_ioport_device2 (qstring *_device, const char *file, choose_ioport_parser_t *parse_params) |
| idaman THREAD_SAFE const ioport_t *ida_export | find_ioport (const ioports_t &ports, ea_t address) |
| Find ioport in the array of ioports. | |
| idaman THREAD_SAFE const ioport_bit_t *ida_export | find_ioport_bit (const ioports_t &ports, ea_t address, size_t bit) |
| Find ioport bit in the array of ioports. | |
| idaman THREAD_SAFE int ida_export | call_system (const char *command) |
| Execute a operating system command. More... | |
Open/Read/Write/Close Files | |
There are two sets of "open file" functions. The first set tries to open a file and returns success or failure. The second set is "open or die": if the file cannot be opened then the function will display an error message and exit. | |
| idaman THREAD_SAFE FILE *ida_export | fopenWT (const char *file) |
| Open a new file for write in text mode, deny write. More... | |
| idaman THREAD_SAFE FILE *ida_export | fopenWB (const char *file) |
| Open a new file for write in binary mode, deny read/write. More... | |
| idaman THREAD_SAFE FILE *ida_export | fopenRT (const char *file) |
| Open a file for read in text mode, deny none. More... | |
| idaman THREAD_SAFE FILE *ida_export | fopenRB (const char *file) |
| Open a file for read in binary mode, deny none. More... | |
| idaman THREAD_SAFE FILE *ida_export | fopenM (const char *file) |
| Open a file for read/write in binary mode, deny write. More... | |
| idaman THREAD_SAFE FILE *ida_export | fopenA (const char *file) |
| Open a file for append in text mode, deny none. More... | |
| idaman THREAD_SAFE FILE *ida_export | openR (const char *file) |
| Open a file for read in binary mode or die, deny none. More... | |
| idaman THREAD_SAFE FILE *ida_export | openRT (const char *file) |
| Open a file for read in text mode or die, deny none. More... | |
| idaman THREAD_SAFE FILE *ida_export | openM (const char *file) |
| Open a file for read/write in binary mode or die, deny write. More... | |
Loader Input Source | |
Starting with v4.8 IDA can load and run remote files. In order to do that, we replace the FILE* in the loader modules with an abstract input source (linput_t). The source might be linked to a local or remote file. | |
| #define | DEF_LREADBYTES(read, type, size) |
| Helper to define lread2bytes(), lread4bytes(), etc. More... | |
| enum | linput_type_t { LINPUT_NONE , LINPUT_LOCAL , LINPUT_RFILE , LINPUT_PROCMEM , LINPUT_GENERIC } |
| loader input source More... | |
| typedef janitor_t< linput_t * > | linput_janitor_t |
| Object that will free an linput_t at destruction-time. | |
| idaman void ida_export | lread (linput_t *li, void *buf, size_t size) |
| Read the input source. More... | |
| idaman ssize_t ida_export | qlread (linput_t *li, void *buf, size_t size) |
| Read the input source. More... | |
| idaman char *ida_export | qlgets (char *s, size_t len, linput_t *li) |
| Read one line from the input source. More... | |
| idaman int ida_export | qlgetc (linput_t *li) |
| Read one character from the input source. More... | |
| idaman int ida_export | lreadbytes (linput_t *li, void *buf, size_t size, bool mf) |
| Read multiple bytes and swap if necessary. More... | |
| int idaapi | lread2bytes (linput_t *li, int16 *res, bool mf) |
| Read a value from linput - also see lreadbytes() | |
| int idaapi | lread2bytes (linput_t *li, uint16 *res, bool mf) |
| Read a value from linput - also see lreadbytes() | |
| int idaapi | lread4bytes (linput_t *li, int32 *res, bool mf) |
| Read a value from linput - also see lreadbytes() | |
| int idaapi | lread4bytes (linput_t *li, uint32 *res, bool mf) |
| Read a value from linput - also see lreadbytes() | |
| int idaapi | lread8bytes (linput_t *li, int64 *res, bool mf) |
| Read a value from linput - also see lreadbytes() | |
| int idaapi | lread8bytes (linput_t *li, uint64 *res, bool mf) |
| Read a value from linput - also see lreadbytes() | |
| idaman char *ida_export | qlgetz (linput_t *li, int64 fpos, char *buf, size_t bufsize) |
| Read a zero-terminated string from the input. More... | |
| idaman int64 ida_export | qlsize (linput_t *li) |
| Get the input source size. | |
| idaman qoff64_t ida_export | qlseek (linput_t *li, qoff64_t pos, int whence=SEEK_SET) |
| Set input source position. More... | |
| qoff64_t idaapi | qltell (linput_t *li) |
| Get input source position. | |
| idaman linput_t *ida_export | open_linput (const char *file, bool remote) |
| Open loader input. | |
| idaman THREAD_SAFE void ida_export | close_linput (linput_t *li) |
| Close loader input. | |
| idaman THREAD_SAFE FILE *ida_export | qlfile (linput_t *li) |
| Get FILE* from the input source. More... | |
| idaman THREAD_SAFE linput_t *ida_export | make_linput (FILE *fp) |
| Convert FILE * to input source. More... | |
| idaman THREAD_SAFE void ida_export | unmake_linput (linput_t *li) |
| Free an linput_t object (also see make_linput()) | |
| idaman THREAD_SAFE linput_t *ida_export | create_generic_linput (generic_linput_t *gl) |
| Create a generic linput. More... | |
| idaman THREAD_SAFE linput_t *ida_export | create_bytearray_linput (const uchar *start, size_t size) |
| Trivial memory linput. | |
| idaman linput_t *ida_export | create_memory_linput (ea_t start, asize_t size) |
| Create a linput for process memory. More... | |
| THREAD_SAFE linput_type_t idaapi | get_linput_type (linput_t *li) |
| Get linput type. | |
Macros | |
| #define | CFG_SUBDIR "cfg" |
| #define | IDC_SUBDIR "idc" |
| #define | IDS_SUBDIR "ids" |
| #define | IDP_SUBDIR "procs" |
| #define | LDR_SUBDIR "loaders" |
| #define | SIG_SUBDIR "sig" |
| #define | TIL_SUBDIR "til" |
| #define | PLG_SUBDIR "plugins" |
| #define | THM_SUBDIR "themes" |
| #define | IDA_SUBDIR_IDP 0x0001 |
| append the processor name as a subdirectory | |
| #define | IDA_SUBDIR_IDADIR_FIRST 0x0002 |
| $IDADIR/subdir will be first, not last | |
| #define | IDA_SUBDIR_ONLY_EXISTING 0x0004 |
| only existing directories will be present | |
| #define | CSIDL_APPDATA 0x001a |
| #define | CSIDL_LOCAL_APPDATA 0x001c |
| #define | CSIDL_PROGRAM_FILES 0x0026 |
| #define | CSIDL_PROGRAM_FILES_COMMON 0x002b |
| #define | CSIDL_PROGRAM_FILESX86 0x002a |
| #define | IOPORT_SKIP_DEVICE ((const char *)(-1)) |
| See 'parse_params' parameter to choose_ioport_device() | |
Typedefs | |
| typedef qvector< ioport_bit_t > | ioport_bits_t |
| typedef qvector< ioport_t > | ioports_t |
| #define DEF_LREADBYTES | ( | read, | |
| type, | |||
| size | |||
| ) |
Helper to define lread2bytes(), lread4bytes(), etc.
| enum linput_type_t |
| idaman THREAD_SAFE char *ida_export getsysfile | ( | char * | buf, |
| size_t | bufsize, | ||
| const char * | filename, | ||
| const char * | subdir | ||
| ) |
Search for IDA system file.
This function searches for a file in:
| [out] | buf | buffer for file name |
| bufsize | size of output buffer | |
| filename | name of file to search | |
| subdir | if specified, the file is looked for in the specified subdirectory of the ida directory first (see IDA subdirectories) |
| idaman THREAD_SAFE const char *ida_export get_user_idadir | ( | void | ) |
Get user ida related directory.
| idaman THREAD_SAFE int ida_export get_ida_subdirs | ( | qstrvec_t * | dirs, |
| const char * | subdir, | ||
| int | flags = 0 |
||
| ) |
Get list of directories in which to find a specific IDA resource (see IDA subdirectories).
The order of the resulting list is as follows:
| [out] | dirs | output vector for directory names |
| subdir | name of the resource to list (can be nullptr) | |
| flags | Subdirectory modification flags bits |
| idaman THREAD_SAFE bool ida_export get_special_folder | ( | char * | buf, |
| size_t | bufsize, | ||
| int | csidl | ||
| ) |
Get a folder location by CSIDL (see Common CSIDLs).
Path should be of at least MAX_PATH size
| idaman THREAD_SAFE FILE *ida_export fopenWT | ( | const char * | file | ) |
Open a new file for write in text mode, deny write.
If a file exists, it will be removed.
| idaman THREAD_SAFE FILE *ida_export fopenWB | ( | const char * | file | ) |
Open a new file for write in binary mode, deny read/write.
If a file exists, it will be removed.
| idaman THREAD_SAFE FILE *ida_export fopenRT | ( | const char * | file | ) |
Open a file for read in text mode, deny none.
| idaman THREAD_SAFE FILE *ida_export fopenRB | ( | const char * | file | ) |
Open a file for read in binary mode, deny none.
| idaman THREAD_SAFE FILE *ida_export fopenM | ( | const char * | file | ) |
Open a file for read/write in binary mode, deny write.
| idaman THREAD_SAFE FILE *ida_export fopenA | ( | const char * | file | ) |
Open a file for append in text mode, deny none.
| idaman THREAD_SAFE FILE *ida_export openR | ( | const char * | file | ) |
Open a file for read in binary mode or die, deny none.
If a file cannot be opened, this function displays a message and exits.
| idaman THREAD_SAFE FILE *ida_export openRT | ( | const char * | file | ) |
Open a file for read in text mode or die, deny none.
If a file cannot be opened, this function displays a message and exits.
| idaman THREAD_SAFE FILE *ida_export openM | ( | const char * | file | ) |
Open a file for read/write in binary mode or die, deny write.
If a file cannot be opened, this function displays a message and exits.
| idaman THREAD_SAFE void ida_export echsize | ( | FILE * | fp, |
| uint64 | size | ||
| ) |
Change size of file or die.
If an error occurs, this function displays a message and exits.
| fp | pointer to file |
| size | new size of file |
| idaman THREAD_SAFE uint64 ida_export get_free_disk_space | ( | const char * | path | ) |
Get free disk space in bytes.
| path | name of any directory on the disk to get information about |
| idaman THREAD_SAFE bool ida_export choose_ioport_device | ( | qstring * | _device, |
| const char * | file, | ||
| const char *(idaapi *)(qstring *buf, const char *line) | parse_params = nullptr |
||
| ) |
Allow the user to choose the ioport device.
| [in,out] | _device | in: contains default device name. If default_device[0] == 0 then the default device is determined by .default directive in the config file. out: the selected device name |
| file | config file name | |
| parse_params | if present (non nullptr), then defines a callback which will be called for all lines not starting with a dot (.) This callback may parse these lines are prepare a simple processor parameter string. This string will be displayed along with the device name. If it returns IOPORT_SKIP_DEVICE, then the current device will not be included in the list. |
| true | the user selected a device, its name is in 'device' |
| false | the selection was cancelled. if device=="NONE" upon return, then no devices were found in the configuration file |
| idaman THREAD_SAFE int ida_export call_system | ( | const char * | command | ) |
Execute a operating system command.
This function suspends the interface (Tvision), runs the command and redraws the screen.
| command | command to execute. If nullptr, an interactive shell is activated |
| idaman void ida_export lread | ( | linput_t * | li, |
| void * | buf, | ||
| size_t | size | ||
| ) |
Read the input source.
If failed, inform the user and ask him if he wants to continue. If he does not, this function will not return (loader_failure() will be called). This function may be called only from loaders!
| idaman ssize_t ida_export qlread | ( | linput_t * | li, |
| void * | buf, | ||
| size_t | size | ||
| ) |
Read the input source.
| idaman char *ida_export qlgets | ( | char * | s, |
| size_t | len, | ||
| linput_t * | li | ||
| ) |
Read one line from the input source.
| idaman int ida_export qlgetc | ( | linput_t * | li | ) |
Read one character from the input source.
| idaman int ida_export lreadbytes | ( | linput_t * | li, |
| void * | buf, | ||
| size_t | size, | ||
| bool | mf | ||
| ) |
Read multiple bytes and swap if necessary.
| li | input file |
| buf | pointer to output buffer |
| size | number of bytes to read |
| mf | big endian? |
| 0 | ok |
| -1 | failure |
| idaman char *ida_export qlgetz | ( | linput_t * | li, |
| int64 | fpos, | ||
| char * | buf, | ||
| size_t | bufsize | ||
| ) |
Read a zero-terminated string from the input.
If fpos == -1 then no seek will be performed.
Set input source position.
| idaman THREAD_SAFE FILE *ida_export qlfile | ( | linput_t * | li | ) |
Get FILE* from the input source.
If the input source is linked to a remote file, then return nullptr. Otherwise return the underlying FILE* Please do not use this function if possible.
| idaman THREAD_SAFE linput_t *ida_export make_linput | ( | FILE * | fp | ) |
Convert FILE * to input source.
Used for temporary linput_t objects - call unmake_linput() to free the slot after the use.
| idaman THREAD_SAFE linput_t *ida_export create_generic_linput | ( | generic_linput_t * | gl | ) |
Create a generic linput.
| gl | linput description. this object will be destroyed by close_linput() using "delete gl;" |
| idaman linput_t *ida_export create_memory_linput | ( | ea_t | start, |
| asize_t | size | ||
| ) |
Create a linput for process memory.
This linput will use read_dbg_memory() to read data.
| start | starting address of the input |
| size | size of the memory area to represent as linput if unknown, may be passed as 0 |