Показать сообщение отдельно

  #3  
Старый 07.07.2008, 21:53
0x0c0de
Постоянный
Регистрация: 25.05.2007
Сообщений: 448
Провел на форуме:
4226446

Репутация: 1564
Отправить сообщение для 0x0c0de с помощью ICQ
По умолчанию

17. Запись в память

Код:
Writemem(addr,buf,size)
addr – адрес
buf – откуда копируем байты
size – размер буфера

18. Дизассемблирование команды

Код:
Disassm(addr,type)
Первый параметр – адрес, по которому нужно дизассемблировать команду
Второй параметр – тип дизасма

Код:
DISASM_SIZE    получение длины команды
DISASM_ALL полное дизассемблирование
Функция возвращает структуру t_disasm

Код:
typedef struct t_disasm {         // Results of disassembling
  ulong     ip;                   // (*) Instrucion pointer
  char      dump[TEXTLEN];      // Hexadecimal dump of the command
  char      result[TEXTLEN];    // Disassembled command
  char      comment[TEXTLEN];   // Brief comment
  char      opinfo[3][TEXTLEN]; // Comments to command's operands
  int       cmdtype;              // (*) One of C_xxx
  int       memtype;              // (*) Type of addressed variable in memory

  int       nprefix;              // (*) Number of prefixes
  int       indexed;              // Address contains register(s)
  ulong     jmpconst;             // (*) Constant jump address
  ulong     jmptable;             // (*) Possible address of switch table
  ulong     adrconst;             // (*) Constant part of address
  ulong     immconst;             // (*) Immediate constant
  int       zeroconst;            // (*) Whether contains zero constant
  int       fixupoffset;          // (*) Possible offset of 32-bit fixups

  int       fixupsize;            // (*) Possible total size of fixups or 0
  ulong     jmpaddr;              // Destination of jump/call/return
  int       condition;            // 0xFF:unconditional, 0:false, 1:true
  int       error;                // (*) Error while disassembling command
  int       warnings;             // (*) Combination of DAW_xxx
  int       optype[3];            // Type of operand (extended set DEC_xxx)
  int       opsize[3];            // Size of operand, bytes

  int       opgood[3];            // Whether address and data valid
  ulong     opaddr[3];            // Address if memory, index if register
  ulong     opdata[3];            // Actual value (only integer operands)
  t_operand op[3];                // Full description of operand
  ulong     regdata[8];           // Registers after command is executed
  int       regstatus[8];         // Status of registers, one of RST_xxx
  ulong     addrdata;             // Traced memory address

  int       addrstatus;           // Status of addrdata, one of RST_xxx
  ulong     regstack[NREGSTACK];  // Stack tracing buffer
  int       rststatus[NREGSTACK]; // Status of stack items
  int       nregstack;            // Number of items in stack trace buffer
  ulong     reserved[29];         // Reserved for plugin compatibility
} t_disasm;



OllyDbg Plugin API v1.10
Интересное поле - текстовое представление команды – result
Небольшой пример в файле disasm_test.py

19. Ввод числа

Для этих целей существует функция

Код:
Getlng(title,size)
title – заголовок откна ввода
size – размер вводмого значения в байтах (1,2,4)

Возвращаемое значение функции – введенное число

Пример в файле example_input.py

20.Постановка темпового бряка

Код:
 
Tempbp(addr,type)
Адрес, тип.

21.Обычные бряки

Код:
Setbp(addr,type,cmd)
Повторюсь. Примеры использования в breaks.py

Последний раз редактировалось 0x0c0de; 07.07.2008 в 21:55..
 
Ответить с цитированием