Форум программистов, компьютерный форум, киберфорум
Assembler: Windows/protected mode
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
3 / 3 / 0
Регистрация: 10.06.2016
Сообщений: 420

Обращение к структуре ifstream (C++ и ассемблер)

18.07.2017, 22:19. Показов 921. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно прочитать сигнатуру файла. Вот что получилось, но получилось не правильно.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
DWORD a123;
  ifstream from;
  from.open("Project1.exe");
  _asm
  { xor eax, eax
    xor ebx, ebx
    xor ecx, ecx
    mov ecx, dword ptr from
    lea ebx, word ptr [ecx]
 
    mov eax, [ebx+20h]
    mov a123, eax    
  }
  cout<<a123<<endl;  
  from.close();
  //смещ   dec       hex
  //+0   4221872   b06b4000
  //+1   134234219   6b400008
  //+2   268959808     40000810
  //+3   1050624         00081000
  //+4   4104              08100000
  //+5   16                  10000000
  //+6   0                     00000000
  //+7   0                       00000000
  //+8   0                         00000000
  //+9   0                           00000000
  //+10  0                             00000000
  //+11  0                               00000000
  //+12  0                                 00000000
  //+13  0                                   00000000
  //+14  0                                     00000000
  //+15  100663296                               00000006
  //+16  393216                                    00000600
  //+17  1536                                        00060000
  //+18  6                                             06000000
  //+19  0                                               00000000
  //+20  2985776                                           308f2d00 - ???? (другой файл ???)
  // b0 6b 40 00 08 10 00 00 00 00 00 00 00 00 00 00 00 00 06 00 - полученная строка байтов
Полученная строка байтов ничем не похожа на реальную: 4D 5A 50 00 02 ...
Я в Ассемблере новичок и, возможно, где-то сильно лоханулся.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.07.2017, 22:19
Ответы с готовыми решениями:

Ассемблер в паскале: как загрузить массив во встроенный ассемблер и произвести над любым из его чисел сложение(вычитание).
хочу написать программу в паскале с использованием встроенного ассемблера, но прежде чем начать споткнулся на таких вопросах:Не знаю как...

Обращение к структуре
Совсем не могу понять...Вот код #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; typedef struct STACKNODE { int value; ...

Не работает обращение к структуре
#include &lt;iostream&gt; #include &lt;string&gt; using namespace std; struct VA { string Name; string Adres; string...

10
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8665 / 4502 / 1670
Регистрация: 01.02.2015
Сообщений: 13,928
Записей в блоге: 13
18.07.2017, 22:42
А каков внутренний формат этого from? Вам ведь нужно обратиться к буферу. Кроме того, не видно команды чтения - только открытие файла.

А так, думаю, что ошибка - неправильный способ вычисления буфера и в дальнейшем обращение к случайным данным в ОЗУ.
0
Asm/C++/Delphi/Py/PHP/VBA
 Аватар для Jin X
6812 / 2052 / 238
Регистрация: 14.12.2014
Сообщений: 4,310
Записей в блоге: 12
19.07.2017, 12:30
Цитата Сообщение от Инженер_3 Посмотреть сообщение
lea ebx, word ptr [ecx]
Это эквивалентно mov ebx,ecx. То ли нужно было сделать?

Добавлено через 53 секунды
И я бы вообще ebx заменил на edx, ибо ebx, esi, edi, ebp (и esp, разумеется) менять без веской причины не рекомендуется.
0
3 / 3 / 0
Регистрация: 10.06.2016
Сообщений: 420
19.07.2017, 14:40  [ТС]
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
А так, думаю, что ошибка - неправильный способ вычисления буфера и в дальнейшем обращение к случайным данным в ОЗУ.
Совершенно верно - неправильные данные читает, адрес не правильный. А как определить правильный адрес файла?
Я немного изменил решение, но на выходе тот же пшик.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
DWORD a11, a12;
  FILE *fff;
  fff=fopen("Project1.exe","rb");
  _asm
  { xor eax, eax
    xor ecx, ecx
 
    mov ecx, dword ptr fff
    mov a11, ecx
 
    mov eax, [ecx+0] //изменяем от 0 до 20
    mov a12, eax
  }
  cout<<"a11 = "<<a11<<endl; 
  cout<<"a12 = "<<a12<<endl;
  fclose(fff);
  //смещ    dec      hex
  //+0   40131028  d4596402
  //+1   3556926553  596402d4
  //+2   1507066468    6402d459
  //+3   1683608578      02d45964
  //+4   40131028          d4596402
  //+5   156761              59640200
  //+6   612                   64020000
  //+7   2                       02000000
  //+8   0                         00000000
  //+9   0                           00000000
  //+10  33554432                      00000002
  //+11  131072                          00000200
  //+12  512                               00020000
  //+13  2                                   02000000
  //+14  0                                     00000000
  //+15  1157627904                              00000045
  //+16  4521984                                   00004500
  //+17  17664                                       00450000
  //+18  69                                            45000000
  //+19  50331648                                        00000003
  //+20  3020095488                                        000003b4
  // d4 59 64 02 d4 59 64 02 00 00 00 00 00 00 00 00 00 00 45 00 00 - получили
  // 4d 5a 50 00 02 00 00 00 - должно быть
0
653 / 161 / 64
Регистрация: 08.04.2015
Сообщений: 412
19.07.2017, 15:15
Инженер_3, выше уже писали, что файл надо прочитать в память, а не просто открыть. В функции чтения укажете адрес памяти, по этому адресу и будете потом искать нужные байты. Только не забудьте, что буфер для чтения не возьмётся из ниоткуда, память под него надо выделить.
0
3 / 3 / 0
Регистрация: 10.06.2016
Сообщений: 420
19.07.2017, 15:55  [ТС]
Цитата Сообщение от UnknownSoldier Посмотреть сообщение
Инженер_3, выше уже писали, что файл надо прочитать в память, а не просто открыть. В функции чтения укажете адрес памяти, по этому адресу и будете потом искать нужные байты. Только не забудьте, что буфер для чтения не возьмётся из ниоткуда, память под него надо выделить.
То есть мне нужно сначала прочитать в буфер весь файл, а потом "искать" нужные байты?
А как можно без этого чтения напрямую обратиться к байтам файла, что бы его не читать полностью.
0
653 / 161 / 64
Регистрация: 08.04.2015
Сообщений: 412
19.07.2017, 17:10
Почему обязательно весь? Можете прочитать нужное количество байтов из нужного места.

Почитайте про работу с файлами. Не применительно к ассемблеру, а в целом.
0
3 / 3 / 0
Регистрация: 10.06.2016
Сообщений: 420
19.07.2017, 17:28  [ТС]
Цитата Сообщение от UnknownSoldier Посмотреть сообщение
Почему обязательно весь? Можете прочитать нужное количество байтов из нужного места.
Почитайте про работу с файлами. Не применительно к ассемблеру, а в целом.
Это я знаю, как можно прочитать с любого места файла нужное кол-во символов в бинарном режиме.
Хотелось бы на ассемблере.
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8665 / 4502 / 1670
Регистрация: 01.02.2015
Сообщений: 13,928
Записей в блоге: 13
19.07.2017, 21:46
Асм ничем не лучше C/C++. Если сможете сделать на C - получиться аналогично и на асме. Т.к. алгоритм один и тот же.
1
3 / 3 / 0
Регистрация: 10.06.2016
Сообщений: 420
20.07.2017, 09:04  [ТС]
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
Асм ничем не лучше C/C++. Если сможете сделать на C - получиться аналогично и на асме. Т.к. алгоритм один и тот же.
И ещё вопрос, а если написать на С/С++, а потом в ОллиДебагере просмотреть, то что там будет? Код asm ?
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8665 / 4502 / 1670
Регистрация: 01.02.2015
Сообщений: 13,928
Записей в блоге: 13
20.07.2017, 12:40
Да, там будет асм, но не очень понятный.
Смысл моего совета - проверка корректности алгоритма перед переписыванием его на другой язык.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.07.2017, 12:40
Помогаю со студенческими работами здесь

Обращение динамического массива к структуре
Подскажите как заполнить данные дин.массива по структуре. Задание просто создать дин.массив через new struct Car { std::string...

Обращение к структуре из другого файла
У меня есть 2 класса: Windows (окна) - содержащий ссылки на окна, и обрабатывающий события мыши Window (окно) - содержит спрайты и...

Почему не проходит обращение к структуре?
#include &lt;iostream&gt; #include &lt;string&gt; using namespace std; int main() { const int size = 10; int z = 0;

Обращение к структуре - параметру класса
#include &lt;iostream&gt; using namespace std; class Example{ public: struct mean{ int a; int...

Обращение к структуре в классе с выделением памяти
Добрый день уважаемые форумчане. Столкнулся с такой проблемой. Есть класс: class Components { struct comps{ // -- База компонентов ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru