Сейчас на форуме: jinoweb (+4 невидимых)

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

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

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

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

c981_16.03.2020_EXELAB.rU.tgz - Screenshot_4.png




Ранг: 622.6 (!), 521thx
Активность: 0.330.89
Статус: Участник
_Вечный_Студент_

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

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


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

-----
Give me a HANDLE and I will move the Earth.




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

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

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

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




Ранг: 271.4 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 16 марта 2020 09:31 · Поправил: f13nd
· Личное сообщение · #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 используется либо в формате файла, либо в протоколе обмена. Поэтому что бы там ни было "в виде инта", вид инта может оказаться неожиданным. Что-то более внятное по скриншоту только на шоу экстрасенсов скажут.

-----
2 оттенка серого




Ранг: 63.5 (постоянный), 35thx
Активность: 0.290.96
Статус: Участник

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

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

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



Ранг: 72.4 (постоянный), 33thx
Активность: 0.050.03
Статус: Участник

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

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


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




Ранг: 271.4 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

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

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

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

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


-----
2 оттенка серого





Ранг: 338.5 (мудрец), 349thx
Активность: 2.112.42
Статус: Участник

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

f13nd

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

-----
vx





Ранг: 271.4 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

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

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

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

-----
2 оттенка серого


| Сообщение посчитали полезным: difexacaw
 eXeL@B —› Программирование —› Программа не принимает данные
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати