Сейчас на форуме: asfa, bartolomeo (+7 невидимых)

 eXeL@B —› Вопросы новичков —› IDA , C листинг
Посл.ответ Сообщение

Ранг: 42.2 (посетитель), 42thx
Активность: 0.040
Статус: Участник

Создано: 10 марта 2012 23:02
· Личное сообщение · #1

Верно ли я понимаю что данный код

Code:
  1. signed int __cdecl sub_(int a1, FILE *a2)
  2. {
  3.   signed int result; // eax@2
  4.   int v3; // eax@4
  5.   int v4; // ecx@6
  6.   int v5; // eax@11
  7.   char v6; // sf@16
  8.   int v7; // eax@17
  9.   signed int v8; // [sp+10h] [bp-1Ch]@1
  10.  
  11.   v8 = 0;
  12.   if ( a2 != 0 )
  13.   {
  14.     _lock_file(a2);
  15.     if ( !(a2->_flag & 0x40) )
  16.     {
  17.       v3 = _fileno(a2);
  18.       if ( v3 == -1 || v3 == -2 )
  19.         v4 = (int)&unk_10027700;
  20.       else
  21.         v4 = dword_10029360[v3 >> 5] + ((v3 & 0x1F) << 6);
  22.       if ( *(_BYTE *)(v4 + 36) & 0x7F
  23.         || (v3 == -1 || v3 == -2 ? (v5 = (int)&unk_10027700) : (v5 = dword_10029360[v3 >> 5] + ((v3 & 0x1F) << 6)),
  24.             *(_BYTE *)(v5 + 36) & 0x80) )
  25.       {
  26.         *_errno() = 22;
  27.         _invalid_parameter(0, 0, 0, 0, 0);
  28.         v8 = -1;
  29.       }
  30.     }
  31.     if ( !v8 )
  32.     {
  33.       v6 = a2->_cnt-- - 1 < 0;
  34.       if ( v6 )
  35.       {
  36.         v7 = _flsbuf(a1, a2);
  37.       }
  38.       else
  39.       {
  40.         *a2->_ptr = a1;
  41.         v7 = (unsigned __int8)a1;
  42.         ++a2->_ptr;
  43.       }
  44.       v8 = v7;
  45.     }
  46.     sub_100101D3();
  47.     result = v8;
  48.   }
  49.   else
  50.   {
  51.     *_errno() = 22;
  52.     _invalid_parameter(0, 0, 0, 0, 0);
  53.     result = -1;
  54.   }
  55.   return result;
  56. }


Возвращает 4 байта из файла а2 по смещению а1 ?



Ранг: 590.4 (!), 408thx
Активность: 0.360.18
Статус: Модератор

Создано: 11 марта 2012 00:09
· Личное сообщение · #2

Неправильно. Если погуглить _flsbuf то видно что это операция записи. Было бы странно, если бы при чтении происходила запись. По функции видно что она из стандартного crt. Логика подсказывает что это может быть fputc, а поиск дает http://www.koders.com/c/fidD4AAE981D7AE0B18EB18C7451E5D8C9D60047FFA.aspx

-----
старый пень


| Сообщение посчитали полезным: kid
 eXeL@B —› Вопросы новичков —› IDA , C листинг
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати