eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 1 марта!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: alexsey007, vitalik9 (+8 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Оффтоп —› syser - а он еще нужен?
<< . 1 . 2 . 3 . 4 . 5 . 6 . >>
Посл.ответ Сообщение


Ранг: 1002.0 (!!!!)
Статус: Участник

Создано: 26 декабря 2016 00:08 New!
Цитата · Личное сообщение · #1

есть мысль себе в портфолио добавить хоть что то, что можно показать на паблик
из всего что сделано или делается или будет делаться, почти ничего на паблик показывать нельзя
вспомнил про Syser,его можно, могу восстановить соурсы ядра дебагера, которое общее для Ring3 и Ring0
(кто помнит у Syser два дебагера, ring3 и ring0, знают все только ring0, про ring3 мало наверное кто помнит, он был бесплатен)
ну и сам Ring3 часть как рабочий дебагер, можно и всю Ring0, но мне это не интересно
ну и все конечно на гитхаб

собственно вопрос, а дальше это кому то интересно? подхватить,развивать итд, гуи дебагер для ядра еще живы ?


Ранг: 1002.0 (!!!!)
Статус: Участник

Создано: 9 мая 2017 16:28 · Поправил: reversecode New!
Цитата · Личное сообщение · #2

Code:
  1.          unsigned char Str[80];
  2.          unsigned char CodeBuf[100] = {0x90, 0x90, 0x90, 0x90, 
  3.                  0x74, 0x1A, 0x39, 0x5D, 0x1C, 0x57, 0x6A, 0x7E, 0x59, 0x8D, 0xB5, 0x08, 0xFE, 0xFF, 0xFF,
  4.                  0x8B, 0xF8, 0xF3, 0xA5, 0x5F, 0x75, 0x06, 0x89, 0x98, 0xd0, 0x01, 0x00, 0x00, 0x8b, 0x45,
  5.                  0x08, 0x5e, 0x5b, 0xc9, 0xc2, 0x18, };
  6.  
  7.          unsigned char *pCodeBuf = CodeBuf;
  8.          int Len;
  9.  
  10.          for (int i = 0; i < 30; ++i)
  11.          {
  12.          
  13.          Len = Disassembly(Str, pCodeBuf, 0x100, 1, 1, 1);
  14.          printf("DISASM ");
  15.                  for (int l = 0; l < Len; ++l)
  16.                  {
  17.                         printf("%02x ", pCodeBuf[l]);
  18.                  }
  19.                  if (!= 7)
  20.                         for (; l < 7; ++l)
  21.                                    printf(" ");
  22.  
  23.          printf(" Len %d = '%s'\n", Len, Str);
  24.          pCodeBuf += Len;
  25.          }
  26.  





Code:
  1. DISASM 90                    Len 1 = ' nop'
  2. DISASM 90                    Len 1 = ' nop'
  3. DISASM 90                    Len 1 = ' nop'
  4. DISASM 90                    Len 1 = ' nop'
  5. DISASM 74 1a                 Len 2 = ' jz 0000011c'
  6. DISASM 39 5d 1c              Len 3 = ' cmp [ebp+1c],ebx'
  7. DISASM 57                    Len 1 = ' push edi'
  8. DISASM 6a 7e                 Len 2 = ' push 7e'
  9. DISASM 59                    Len 1 = ' pop ecx'
  10. DISASM 8d b5 08 fe ff ff     Len 6 = ' lea esi,[ebp+fffffe08]'
  11. DISASM 8b f8                 Len 2 = ' mov edi,eax'
  12. DISASM f3 a5                 Len 2 = ' rep movsd [edi],[esi]'
  13. DISASM 5f                    Len 1 = ' pop edi'
  14. DISASM 75 06                 Len 2 = ' jnz 00000108'
  15. DISASM 89 98 d0 01 00 00     Len 6 = ' mov [eax+000001d0],ebx'
  16. DISASM 8b 45 08              Len 3 = ' mov eax,[ebp+8]'
  17. DISASM 5e                    Len 1 = ' pop esi'
  18. DISASM 5b                    Len 1 = ' pop ebx'
  19. DISASM c9                    Len 1 = ' leave'
  20. DISASM c2 18 00              Len 3 = ' ret 18'
  21. DISASM 00 00                 Len 2 = ' add [eax],al'
  22. DISASM 00 00                 Len 2 = ' add [eax],al'
  23. DISASM 00 00                 Len 2 = ' add [eax],al'
  24. DISASM 00 00                 Len 2 = ' add [eax],al'
  25. DISASM 00 00                 Len 2 = ' add [eax],al'
  26. DISASM 00 00                 Len 2 = ' add [eax],al'


Добавлено спустя 10 минут
Code:
  1.          unsigned char Str[80];
  2. #if 0
  3.          unsigned char CodeBuf[100] = {0x90, 0x90, 0x90, 0x90, 
  4.                  0x74, 0x1A, 0x39, 0x5D, 0x1C, 0x57, 0x6A, 0x7E, 0x59, 0x8D, 0xB5, 0x08, 0xFE, 0xFF, 0xFF,
  5.                  0x8B, 0xF8, 0xF3, 0xA5, 0x5F, 0x75, 0x06, 0x89, 0x98, 0xd0, 0x01, 0x00, 0x00, 0x8b, 0x45,
  6.                  0x08, 0x5e, 0x5b, 0xc9, 0xc2, 0x18, };
  7. #else
  8.          unsigned char CodeBuf[100] = { //CA1723
  9.                  0x48, 0x8b, 0x45, 0x00,
  10.                  0xbe, 0x04, 0x00, 0x00, 0x00,
  11.                  0x48, 0x89, 0xef,
  12.                  0xff, 0x50, 0x10,
  13.                  0x84, 0xc0,
  14.  
  15.                  0x4d, 0x63, 0x6c, 0x24, 0x04,
  16.                  0x4c, 0x89, 0xe3,
  17.                  0x49, 0x03, 0x5c, 0x24, 0x10,
  18.                  0x49, 0xc1, 0xe5, 0x04,
  19.                  0x49, 0x01, 0xdd,
  20.  
  21.                  };
  22. #endif
  23.          unsigned char *pCodeBuf = CodeBuf;
  24.          int Len;
  25.  
  26.          //do {
  27.          for (int i = 0; i < 30; ++i)
  28.          {
  29.          
  30.          Len = Disassembly(Str, pCodeBuf, 0x100, 2, 1, 1);
  31.          printf("DISASM ");
  32.                  for (int l = 0; l < Len; ++l)
  33.                  {
  34.                         printf("%02x ", pCodeBuf[l]);
  35.                  }
  36.                  if (!= 7)
  37.                         for (; l < 7; ++l)
  38.                                    printf(" ");
  39.  
  40.          printf(" Len %d = '%s'\n", Len, Str);
  41.          pCodeBuf += Len;
  42.          }
  43.  


Code:
  1. DISASM 48 8b 45 00           Len 4 = ' mov rax,[rbp]'
  2. DISASM be 04 00 00 00        Len 5 = ' mov esi,4'
  3. DISASM 48 89 ef              Len 3 = ' mov rdi,rbp'
  4. DISASM ff 50 10              Len 3 = ' call [rax+10]'
  5. DISASM 84 c0                 Len 2 = ' test al,al'
  6. DISASM 4d 63 6c 24 04        Len 5 = ' movsxd r13,[r12+4]'
  7. DISASM 4c 89 e3              Len 3 = ' mov rbx,r12'
  8. DISASM 49 03 5c 24 10        Len 5 = ' add rbx,[r12+10]'
  9. DISASM 49 c1 e5 04           Len 4 = ' shl r13,4'
  10. DISASM 49 01 dd              Len 3 = ' add r13,rbx'

| Сообщение посчитали полезным: shellstorm


Ранг: 0.0 (гость)
Статус: Участник

Создано: 9 мая 2017 19:01 New!
Цитата · Личное сообщение · #3

Вот именно как выше нельзя, конфликт имен, в любом случае нужен посредник в виде класса или шаблона.
Поздравляю, восстановили дизасм.


Ранг: 1002.0 (!!!!)
Статус: Участник

Создано: 9 мая 2017 19:18 New!
Цитата · Личное сообщение · #4

полторы суток назад подумывал уже забрасывать... диасм выглядел вообще не подьемным...

итог да, в последнем сисере китаезы уже начали развивать x64 дизасм, вроде даже как то работает
но в сисер он еще не адаптирован
например в сисере везде 32 битные адреса и указатели, а в дизасм 64 битные

пол дня думал как вытягивать таблицу опкодов,
ида шный експорт на структуры фигню какую то выдает..
писать что то свое было лень...

вобщем идц скриптом пол дня плясок к флагами и прочим что можно вятянуть с идц
и таблица опкодов в 210 кил на си, сгенерена....

дело выглядит за малым...
1) интерфейс дизасма завести в гуи...
2) приделать загрузку файла...
3) и управление брекпоинтами доделать..

и можно уже что то пытаться запускать

если дизасм x64 окажется законченным, то можно даже будет помечтать про syser-debugger-x64

правда перевести всю логику гуи на 64 битный размерность.. думаю легким не будет..

Ранг: 0.0 (гость)
Статус: Участник

Создано: 9 мая 2017 19:33 New!
Цитата · Личное сообщение · #5

Отрефакторить типы на кастомные и размер типов выбирать через #ifdef разрядность, в том же x64dbg так и сделано.

Добавлено спустя 3 минуты
Вот кстати на дизасм можно было и забить, технологически это не является чем то сложным, скорее рутина и для портфолио никак не отразится если возьмете любой другой современный двиг: xed, capstone, zyan, у последних двух интерфейсы по проще, а который по середине развивается активней.


Ранг: 1002.0 (!!!!)
Статус: Участник

Создано: 9 мая 2017 19:42 New!
Цитата · Личное сообщение · #6

ну это когда проект разрабатывается с нуля, и вдумчиво ставятся typedef
тогда меняется только тип и почти вуаля...
а когда у меня везде рав типы
типа unsigned short unsigned long итд
уникоде вайд чар был вообще unsined short
пару дней назад перевел все на wchar_t

вообщем это как на той великой картинке про три кружка, и выбор, быстрее, качественее, дешевле
выбирать нужно что то одно

вот если дотяну, то уже тогда проведу рефакторинг чистку итд

я то и логику местами не сильно знаю, реверсю чисто код, что бы был логически правильным и чистым

а потом уже по итогу буду вникать в акрхитектуру итд

уже 1.5 метра, сорсов, это вместе с 200 килами опкодов...

и еще рефакторинг std::map впереди..
без них удаления брекпоитов не будет работать..

Добавлено спустя 2 минуты
я раньше писал, там дизасм прибит хорошо гвоздями
но в целом он оказался легким... четыре функи и остальное таблица опкодов

надстройка для дизасма(енжин в сисер) заумная, она там и символы тягает в дизасм, и красит его итд

и понять как она работает без вытягивания всегда дизасма было не возможно.....

Добавлено спустя 4 минуты
лучшее портфолио это когда что то рабочее и функциональное))

если дело и дойдет до какого то пиара, то мало кому будет вообще интересно что там и как кто реверсил
интересуются результатом, типа "сисер-реверс-работает-ух-ты"

Ранг: 0.0 (гость)
Статус: Участник

Создано: 9 мая 2017 19:49 New!
Цитата · Личное сообщение · #7

reversecode пишет: надстройка для дизасма(енжин в сисер) заумная, она там и символы тягает в дизасм, и красит его итд

Так вы восстановили интерфейсы, на сами таблицы можно было забить, просто обернув любой нормальный движок в этот интерфейс, чтобы по всему коду не переписывать всю работу с дизасмом.

Добавлено спустя 2 минуты
Ведь в дизасме кода всего ничего, все тянут как раз таблицы, тем более процессоры с тех пор немного расширили инструкции и уже на современных приложениях будут фейлы, тогда просто опкодов таких не было.

Добавлено спустя 5 минут
По поводу типов, студия умеет их рефакторить. Я собственно почему IDR переписывал на delphi, в builder нет инструментов рефакторинга от слова совсем, там тоже мешанина из типов была, после конвертация в builder, немного фиксов и все снова заработало.


Ранг: 1002.0 (!!!!)
Статус: Участник

Создано: 9 мая 2017 20:00 New!
Цитата · Личное сообщение · #8

вижуал студия умеет через визуал ассисит ))
но фар наше все, иде не люблю

Ранг: 0.0 (гость)
Статус: Участник

Создано: 9 мая 2017 20:05 New!
Цитата · Личное сообщение · #9

Не не, сейчас она и сама умеет, теперь студия самостоятельно строит ast и разбирает дерево, а раньше да, без ассиста жизни не было, сейчас ассист устанавливается скорее по привычке, а не из за острой необходимости.


Ранг: 1002.0 (!!!!)
Статус: Участник

Создано: 9 мая 2017 22:37 New!
Цитата · Личное сообщение · #10

дизасмы вообще не люблю, говнокод везде, даже хваленые капстоны и прочие пистоны

из понравившихся мне это микрософтовский msdis*.dll

лежит pdb, от нескольких,от популярного 110 версии, и сильно помоднее уже не помню номер, все мечтал реверснуть в соурсы..

Добавлено спустя 2 минуты
помечтаю чуток, .... что нужно от дебагера что бы обойти x64dbg ?

так же не курсе какие там претензии и траблы с ольгой 32 и 64....

Ранг: 0.0 (гость)
Статус: Участник

Создано: 9 мая 2017 23:29 New!
Цитата · Личное сообщение · #11

reversecode пишет: даже хваленые капстоны

так там код едва превышает размеры hello world, выкинуть crt хлам, а остальное и так нормально, таблицы генерируются автоматикой.

reversecode пишет: что нужно от дебагера что бы обойти x64dbg ?

достаточно не зависать при каждом чихе и падать тоже не желательно, вот с этим у x64dbg все очень плохо.
пока игрался, у меня выросла гора крашдампов которые толсто намекают на расстрел памяти.
вот api для плагинов там вполне годное в плане продуманности, хотя некоторые интерфейсы не мешало бы вынести пользователям, но это и самом не сложно сделать, там функции собраны в таблицы, нужно лишь дописать экспорты, еще не помешало бы сменить тему у сисера на что то темное или более нейтральное чем вырвиглазная голубизна, азиаты в этом смысле живут в альтернативной реальности и у них чувство прекрасного отличается от чувства прекрасного остальной части человечества.


Ранг: 1002.0 (!!!!)
Статус: Участник

Создано: 10 мая 2017 00:00 New!
Цитата · Личное сообщение · #12

Так цвета там меняются, в оригинальном сисере там же настройки есть , цвета красятся как хотят

но выбор такой цветовой палитры думаю появился не зря. у сисера мелковатый фонт
поэтому чуть другое и уже плохо видно
хотя взял сисер 2005 года
там совсем светлая гамма, светлосиний и белый

где то недавно помню Vamit отписывал на форуме почему ему 64 версия не подошла, для вмпрота... и прочие минусы...

Ранг: 0.0 (гость)
Статус: Участник

Создано: 10 мая 2017 00:26 New!
Цитата · Личное сообщение · #13

reversecode пишет: Так цвета там меняются, в оригинальном сисере там же настройки есть , цвета красятся как хотят

Это я знаю, имел ввиду сделать тему по умолчанию или выбор тем, сделать штуки три встроенные, а кому не нравится пусть сами делают.

reversecode пишет: но выбор такой цветовой палитры думаю появился не зря. у сисера мелковатый фонт

Вот это тоже нужно решать, учитывая все эти ultra hd и размеры современных мониторов.

reversecode пишет: где то недавно помню Vamit отписывал на форуме почему ему 64 версия не подошла, для вмпрота

Недавно снимал говнопрот в нем же, в принципе там антиотладки практически нет, поэтому все относительно спокойно, только сам отладчик задумчивый, бряки на память вообще странно работают, бывают раза с десятого устанавливаются или устанавливаются только из контекстного меню, срабатывают тоже не всегда, хз в чем дело, не разбирался. На больших файлах поиск строк лучше не запускать, дабы не лицезреть зависший UI несколько минут. Бывает иногда пропускает переходы, жмешь F8 и оказываешься в совершенно неожиданном месте, не там где должен, иногда зависает на бряке, не идет дальше по F8 пока не уберешь бряк, причем файл чистый, никакой антиотладки или чего то подобного. Хватает там странного, учитывая, сколько переходов делает говнопрот, думаю не удивительно, что Vamit на него плюнул.


Ранг: 1002.0 (!!!!)
Статус: Участник

Создано: 11 мая 2017 16:34 New!
Цитата · Личное сообщение · #14

| Сообщение посчитали полезным: shellstorm, DenCoder, HandMill, Veliant


Ранг: 0.0 (гость)
Статус: Участник

Создано: 11 мая 2017 17:49 New!
Цитата · Личное сообщение · #15

респект.


Ранг: 285.1 (наставник)
Статус: Участник

Создано: 11 мая 2017 18:39 New!
Цитата · Личное сообщение · #16

shellstorm пишет:
респект


да, покажи лучше скрин - это лучше множества букв, быстрей оценят

Ранг: 0.0 (гость)
Статус: Участник

Создано: 11 мая 2017 18:51 New!
Цитата · Личное сообщение · #17

DenCoder пишет: да, покажи лучше скрин

Да и приступ ностальгии вызывает, когда то пользовался сисером и все так же подгорает из за того, что виджеты регистров и стека находится с левой стороны, наркоманы блеадь.


Ранг: 1002.0 (!!!!)
Статус: Участник

Создано: 11 мая 2017 19:45 New!
Цитата · Личное сообщение · #18

та да.. может в кой то век кто то сделает нормальный человеческий дебаггер...
как я упарился с идой что бы сделать простые действия
молодцы китаезы, очень удобно и правильно делали
можно и из регистра по кнопке мыши открыть дамп
и из стека, и вотч комплексный ввести

плять как в иде открыть дамп на переменной вотча ? или как открыть в окне стека функу которая там видно

я упарился искать, ни так ни этак )))
приходится тратить много времени на копирования или запоминания в уме нужных адресов в дампе что бы смотреть данные...


хотел на скорую исправить еще сисероский баг, при котором если ресетишь дебаг то приложение так и остается висеть в зомби...
подебажил так и не понял
запускается через CreateProcessA
пускается и отладочный треид
потом все корректно тушится, даже трейд выходит нормально
а гребанное приложение которое отлаживали так и остается висеть в зомби....
фантастика какая то...
пробежался по сорсам титана и иды сервера... все теже криейт процесс и терминейт

добил подсветку...
надеюсь дальше будет все чуть быстрее

понабивать окна вотча,стеквью, еще есть там окошко трейса по регистрам,
синхронку по кнопкам..
ах ну да самое главное, команды степ трейса))
а то сейчас пока только запуск и стоп

Добавлено спустя 18 часов 30 минут
вроде разобрался с зависшим отлаживаемым процессом ...
в сисере сначала килялся процесс а потом делался резюме трейд
в итоге процесс висел как зомби.. даже другим отладчиком нельзя было подцепиться...

поднял функу резюме трейд выше киляния процесса
и все заработало...
странно конечно.. терм процесс должен был вроде похерить все и сам без вопросов...

разраб китаец кстати был один из сильных сис программеров, разобраный oreans.rar который гулял в 2006 году в нете, это его

Ранг: 300.0 (мудрец)
Статус: Участник

Создано: 12 мая 2017 15:29 New!
Цитата · Личное сообщение · #19

reversecode пишет:
поднял функу резюме трейд выше киляния процесса

Может правильнее сначала контекст потока (EIP) переставить на ExitProcess/ExitThread? Тогда в случае нештатных ситуаций между вызовами ResumeThread и TerminateProcess процесс нормально завершится не выполнив левого кода.


Ранг: 1002.0 (!!!!)
Статус: Участник

Создано: 12 мая 2017 15:33 New!
Цитата · Личное сообщение · #20

на нем стоит ТФ флаг, так что даже отпустив его вроде страшного ничего не должно случится

хотя облазил и титан и иду в сорсах трейса, и еще несколько проэктов по гитхабу и гуглу
везде все одинаковое

Добавлено спустя 3 часа 20 минут
я ору....
нужно пробежаться по void * буферу как байтовому, и найти байты СС
думаете просто ? я тоже думал

if ( ((char*)Buffer)[i] == 0xCC)

и нихуя)))
компилер берет из буфера байт
и тянет его расширяя до знака в 32 битный регистр


Code:
  1. .text:000013F8                 mov     eax, [ebp+arg_4]
  2. .text:000013FB                 add     eax, [ebp+var_8]
  3. .text:000013FE                 mov     cl, [eax]
  4. .text:00001400                 mov     [ebp+var_9], cl
  5. .text:00001403                 movzx   edx, [ebp+var_9]
  6. .text:00001407                 cmp     edx, 0CCh ; '¦'
  7. .text:0000140D                 jnz     short loc_1458


как я только не прыгал с этим условием, компилер все равно пихает его через 32 битный регистр..

в сисере все четко

Code:
  1. .text:000371C0 00C                 cmp     byte ptr [esi], 0CCh
  2. .text:000371C3 00C                 jnz     short loc_371EC



а щас вообще рыдаю)))

шедевр МС компилера, помним что логические операции имеют высший приоритет(как меня учили в школе)
Code:
  1. unsigned char CC = *(((unsigned char*)Buffer)+i);
  2. if (CC & 0xff == 0xCC)
  3. {


в итоге
Code:
  1. .text:000013F4                 mov     eax, [ebp+arg_4]
  2. .text:000013F7                 add     eax, [ebp+var_8]
  3. .text:000013FA                 mov     cl, [eax]
  4. .text:000013FC                 mov     [ebp+var_9], cl
  5. .text:000013FF                 movzx   edx, [ebp+var_9]
  6. .text:00001403                 and     edx, 0
  7. .text:00001406                 jz      short loc_1451


убейте индусов в МС ))))

Добавлено спустя 3 часа 35 минут
ладно, нет времени играться, будет через Ж и логическое & 0xff

Ранг: 0.0 (гость)
Статус: Участник

Создано: 12 мая 2017 19:54 New!
Цитата · Личное сообщение · #21

reversecode пишет: и тянет его расширяя до знака в 32 битный регистр

Проверил несколькими компиляторами, все нормально разворачивают, скорее всего у вас сломался оптимизатор в другом месте, а здесь уже побочный эффект.


Ранг: 1002.0 (!!!!)
Статус: Участник

Создано: 12 мая 2017 19:58 New!
Цитата · Личное сообщение · #22

VS2008
это вообще без оптимизации поскольку дебаг версия

Ранг: 0.0 (гость)
Статус: Участник

Создано: 12 мая 2017 20:58 New!
Цитата · Личное сообщение · #23

reversecode пишет: VS2008

Им тоже проверял, он же входит в компилятор пакетов для python.
Нет, из за дебаг версии такого не должно быть, скорее всего где то выше по коду вы делали касты и они сломали граф предсказаний, поэтому ставится тип оптимального размера исходя из контекста.

Добавлено спустя 4 минуты
Оптимизатор плохо дружит с сишным кастом (type)value, желательно использовать плюсовый static_cast\dynamic_cast\etc, а еще желательно установить 2013 студию, там с stl местами сломана совместимость и при обновлении проекта в будущем могут возникнуть проблемы.


Ранг: 1002.0 (!!!!)
Статус: Участник

Создано: 15 мая 2017 01:58 New!
Цитата · Личное сообщение · #24

да там код простой до безобразия
Code:
  1. bool CALLME(void *Buffer, int i )
  2. {
  3.  
  4.          if (((char*)Buffer)[i] == 0xCC)
  5.                  return false;
  6.  
  7.          return true;
  8. }
  9.  
  10. int main()
  11. {
  12.          char BUFFER[10];
  13.          bool R;
  14.          for (int i = 0; i < 10; ++i)
  15.                  R = CALLME(BUFFER, i);
  16.  
  17.          return 0;
  18. }


я еще помню был жесткий баг в ГЦЦ как миниум
где функа с возвратом ushort -1
компилер выдавал -1 в 32 битном регистре
ух я тогда напарился
но выкрутился как то странно, то ли кастом к типу перед ретурном то ли константой объявлял глобально... уже не помню

Добавлено спустя 10 минут
а кто хочет попарится сис кодингом ? ринг0 вспомнить ?))

нужно понять что за данные приходят в фолтовом 14 трапе в сисере
https://pastebin.com/wFLJAXmg

интересует этот момент
Code:
  1. .text:000621C3 038                 mov     eax, [ebp-4] 
  2. .text:000621C6 038                 push    eax ????
  3. .text:000621C7 03C                 push    dword ptr [eax]
  4. .text:000621C9 040                 push    dword ptr [ebp-8]
  5. .text:000621CC 044                 call    _from_int_14_sub_62076

какие данные отдаются в функу ?
судя по всему [ebp-8] это CR2 фолтовый адрес
[eax] хз, но очень похоже на еррор в трапе
а вот что такое в [ebp-4]
и что выгребает функа _from_int_14_sub_62076
в этом последнем аргументе ?

Code:
  1. sub _from_int_14_sub_62076
  2. ....
  3. .text:00062147                 mov     edx, [ebp+10h]
  4. .text:00062150                 push    dword ptr [edx+4] ??????
  5. ....


Добавлено спустя 5 часов 16 минут
чудеса продлжаются
в МС вообще тупые дятлы ?

Code:
  1. char Byte;
  2.  
  3. if (ReadMemory(Address, &Byte, 1))
  4. {
  5.  
  6.   switch (Byte)
  7.   {
  8.    case 0xC3:
  9.            Hit = true;
  10.            break;
  11.   }
  12. }

и хер там оно попадает в это условие
опять ебучее расширения знака в 32 бита

в сисере здесь тоже условие сломалось
в итоге ни в сисере ни у меня перед фиксом. команда выполнить до первого рета, не работает

Ранг: 46.1 (посетитель)
Статус: Участник

Создано: 15 мая 2017 08:38 New!
Цитата · Личное сообщение · #25

reversecode пишет:
судя по всему [ebp-8] это CR2 фолтовый адрес

ага

reversecode пишет:
[eax] хз, но очень похоже на еррор в трапе
а вот что такое в [ebp-4]


eax = [ebp-4] - esp после фолта, указывает на код ошибки.
Соответственно [eax] - сам код ошибки


Ранг: 1002.0 (!!!!)
Статус: Участник

Создано: 15 мая 2017 14:16 New!
Цитата · Личное сообщение · #26

[eax] код

а что тогда
[eax+4] ?
это третий параметр который передается в функу from_int_14
по моим предположениям это должен был быть EIP из трап фрейма

Ранг: 46.1 (посетитель)
Статус: Участник

Создано: 15 мая 2017 14:48 · Поправил: spinz New!
Цитата · Личное сообщение · #27

кстати, нифига же не код ошибки в [eax] - там ведь еще esp корректируется на 4 вверх.

Значит eax указывает на eip инструкции, вызвавшей исключение

Ну а eax+4 - очевидно на CS


Ранг: 1002.0 (!!!!)
Статус: Участник

Создано: 15 мая 2017 15:07 New!
Цитата · Личное сообщение · #28

не не
такого быть не может потому что в from_int_14
eax логически & 1 проверяется
Code:
  1. .text:00062076 000                 push    ebp
  2. .text:00062077 004                 mov     ebp, esp
  3. .text:00062079 004                 sub     esp, 18h
  4. .text:0006207C 01C                 test    byte ptr [ebp+0Ch], 1
  5. .text:00062080 01C                 jnz     short loc_62093

так что код ошибки в [eax] передается
а вот сам eax ... и [eax+4]

Добавлено спустя 1 минуту
Code:
  1. .text:00062076     Address         = dword ptr  8
  2. .text:00062076     arg_4           = dword ptr  0Ch
  3. .text:00062076     Pa3             = dword ptr  10h
  4. .text:00062076
  5. .text:00062076 000                 push    ebp
  6. .text:00062077 004                 mov     ebp, esp
  7. .text:00062079 004                 sub     esp, 18h
  8. .text:0006207C 01C                 test    byte ptr [ebp+arg_4], 1
  9. .text:00062080 01C                 jnz     short loc_62093

Ранг: 46.1 (посетитель)
Статус: Участник

Создано: 15 мая 2017 15:17 New!
Цитата · Личное сообщение · #29

А листинг https://pastebin.com/wFLJAXmg - это вообще что? Хэндлер инт 14, на который указывает IDT?

Или какая-то функа этого хэндлера.


Ранг: 1002.0 (!!!!)
Статус: Участник

Создано: 15 мая 2017 15:20 New!
Цитата · Личное сообщение · #30

IDT конечно же

Ранг: 46.1 (посетитель)
Статус: Участник

Создано: 16 мая 2017 08:02 · Поправил: spinz New!
Цитата · Личное сообщение · #31

Ну вот давай разберём по шагам.
Пусть после фолта указатель стека равен, например, 100 (десятичный формат).
Тогда по адресу ss:100 находится код ошибки, ss:104 - EIP инструкции, вызвавшей фолт и т.д.

Code:
  1. push  0Eh; esp = 96
  2. call    _HandleInterrupt_sub_19FFC; esp = 96 (предполагая, что функа указатель стека не портит)
  3. lea     esp, [esp+4]; esp = 100
  4. pushf; esp = 96
  5. pusha; esp = 64
  6. mov     ebp, esp; ebp = 64
  7. mov     [ebp-4], ebp; [ebp-4] = 64
  8. add     dword ptr [ebp-4], 28h;[ebp-4] = 104
  9.  


Т.е.
Code:
  1.  
  2. mov     eax, [ebp-4]
  3. push    eax
  4. push    dword ptr [eax]


заталкивает в стек 104 и EIP инструкции, вызвавшей фолт
<< . 1 . 2 . 3 . 4 . 5 . 6 . >>
 eXeL@B —› Оффтоп —› syser - а он еще нужен?

У вас должно быть 20 пунктов ранга, чтобы оставлять сообщения в этом подфоруме, но у вас только 0


Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS