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

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

 eXeL@B —› Программирование —› Программа не принимает данные
Посл.ответ Сообщение

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

Создано: 16 марта 2020 07:09 New!
Цитата · Личное сообщение · #1

Всем привет! Попала ко мне в руки очень важная программа математического моделирования различных процессов, но вот работать никак не хочет. К программе прилагается протокол обмена с этой программой (обмен по TCP). Штатно по протоколу я должен посылать программе пакеты с данными, на что программа должна мне каждую мс присылать результат. Но это оказывается не работает, что бы разобраться что к чему, я попробовал проанализировать программу через IDA и x32dbg что бы выяснить причину отказа работать по штатной циклограмме. Место ,где происходит останов штатного алгоритма ПО я нашел не без труда (первый опыт работы с идой), но разобраться далее что с этим делать у меня не получилось. Итак у меня есть протокол в котором сказано, что я должен послать код команды на отработку начальных условий (0x00100101) и сам параметр НУ (500-байтовую структуру данных) ,на что мне в программе должно появится статусное сообщение "Выдана команда отработка НУ". Я подготовил параметр (в виде инта) и структуру НУ, но когда я ее посылаю, то от программы нет никакой ответной реакции. НА фото показано синей стрелкой место где программа начинает путь по "неправильному пути" т.к. результат сравнения двух переменных не является ноль, поэтому программа оканчивает свою работу в этом цикле (розовая стрелка), а должна перейти к выполнению следующей операции сравнения (зеленая стрелка). Можете подсказать в каком направлении двигаться что бы понять где формируется эта переменная?

{ Атач доступен только для участников форума } - Screenshot_4.png


Ранг: 583.6 (!)
Статус: Участник
_Вечный_Студент_

Создано: 16 марта 2020 07:47 · Поправил: plutos New!
Цитата · Личное сообщение · #2

SoyuzDeveloperTeam пишет:
Можете подсказать в каком направлении двигаться что бы понять где формируется эта переменная?


Ну в каком направлении двигаться ясно: брать debugger, ставить breakpoints, анализировать и думать.
Если вы хотите, что бы кто-то это сделал за вас, то на форуме есть тема поиск специалистов, да только врядли вам по фото кто-то сможет помочь, не видя самой программы.

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

Создано: 16 марта 2020 08:07 New!
Цитата · Личное сообщение · #3

SoyuzDeveloperTeam пишет:
в виде инта

Попробуйте отправлять byte или word.


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

Создано: 16 марта 2020 09:31 · Поправил: f13nd New!
Цитата · Личное сообщение · #4

Code:
  1. mov eax,[676C570]
  2. ...
  3. mov DWORD[ebp-10],eax
  4. ...
  5. push eax
  6. ...
  7. call [htons]
  8. ...
  9. cmp BYTE[ebp-D],2

В 16-битном числе (которое зачем-то флипуется из LE в BE или наоборот), проверяется старший (или младший) байт. Преобразование из LE в BE (или наоборот) для данных, подготовленных программой для самой себя, бесполезно (х86 один хрен только в LE умеет считать), вероятней всего BE используется либо в формате файла, либо в протоколе обмена. Поэтому что бы там ни было "в виде инта", вид инта может оказаться неожиданным. Что-то более внятное по скриншоту только на шоу экстрасенсов скажут.

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

Создано: 16 марта 2020 10:13 New!
Цитата · Личное сообщение · #5

f13nd пишет:
проверяется старший (или младший) байт.

byte ptr [676C573] то есть
Странная конструкция, по мне очень сомнительно что именно этот путь неправильный

Ранг: 72.4 (постоянный)
Статус: Участник

Создано: 23 марта 2020 23:50 New!
Цитата · Личное сообщение · #6

f13nd пишет:
Преобразование из LE в BE (или наоборот) для данных, подготовленных программой для самой себя, бесполезно (х86 один хрен только в LE умеет считать), вероятней всего BE используется либо в формате файла, либо в протоколе обмена.


При передаче данных всегда используется Big Endian, он также известен как network order.


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

Создано: 24 марта 2020 00:03 New!
Цитата · Личное сообщение · #7

ValdikSS пишет:
При передаче данных всегда используется Big Endian

Упоминаний о том, что протокол прикладного уровня описан каким-то стандартом, я не увидел. Так что совсем необязательно, в дико кастомных иногда вижу и LE. В принципе препятствий этому никаких нет, художник видит как хочет. Но я на BE намекал.

Добавлено спустя 30 минут
ЗЫ: чтоб не быть голословным. Промышленный стандарт, сетевой протокол. Оба поля в Little endian.


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

Создано: 26 марта 2020 21:47 New!
Цитата · Личное сообщение · #8

f13nd

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


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

Создано: 26 марта 2020 22:34 New!
Цитата · Личное сообщение · #9

difexacaw пишет:
Удивительно сколько терпения нужно что бы прочитать шапку

Ты шапки и гораздо короче этой никогда не читаешь, какая тебе разница.

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

 eXeL@B —› Программирование —› Программа не принимает данные

Видеокурс ВЗЛОМ