М.Двач / Программирование

Этого треда уже нет.
Это копия, сохраненная 20 декабря 2018 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.

ASM & Reverse engineering №5 /asm/ # OP 24 июня, 01:13 1216107 В конец треда | Веб

1 Кб, 250x20025 Кб, 799x82010 Кб, 718x2743 Кб, 643x337

В этом треде мы изучаем самый компактный и низкоуровневый язык Ассемблер и смежную с ним область: Реверс-инженеринга (RE).

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

Попрошайки с "решите лабу по асме за меня" идут в общий тред, а лучше нахуй.

Книги по RE:
https://beginners.re/ - "Reverse Engineering для начинающих"- бесплатная современная книга на русском языке. К прочтению вкатывающимся и прочим ньюфагам обязательна!
https://mega.nz/#!Bc9VVAYC!Vk6CFlW6VIoskLNgDKXbsL6FacDQeOKe6LX92wNicKY Нарваха практический курс по дебагингу
https://www.goodreads.com/shelf/show/reverse-engineering - список книг

Сайты по RE:
http://wiki.yobi.be/wiki/Reverse-Engineering
https://www.reddit.com/r/ReverseEngineering/comments/hg0fx/a_modest_proposal_absolutely_no_babies_involved/
http://www.program-transformation.org/Transform/ReengineeringWiki
http://blog.livedoor.jp/blackwingcat/
https://yurichev.com/blog/
http://wiki.xentax.com/index.php/DGTEFF

Инструменты для RE:
1) IDA Pro 7.0.torrent (x64 only, для XP нужно патчить + вылеты)
2) IDA Pro 6.8.torrent
3) IDA Pro 5.0 - бесплатная версия для некоммерческого использования
4) Остальное

Все книги и статьи Криса Касперски (R.I.P.)
https://yadi.sk/d/CxzdM1wyea4WP
+ https://rutracker.org/forum/viewtopic.php?t=272818

Книги по ассемблеру:
"Архитектура компьютера" Э. Таненбаум
С.В. Зубков: Assembler. Язык неограниченных возможностей.

Сайты по ассемблеру:
Замена почившему wasm.ru- https://wasm.in/
https://www.unknowncheats.me/wiki/Assembly
http://asmworld.ru/
https://software.intel.com/en-us/articles/intel-sdm
http://www.nasm.us/doc/
https://sourceware.org/binutils/docs/as/index.html#Top
https://msdn.microsoft.com/en-us/library/afzk3475.aspx

Для ковыряющих винду и софт под неё, сайты с описанием структур со смещениями и разными версиями оных:
http://msdn.mirt.net/
http://terminus.rewolf.pl/terminus/
http://geoffchappell.com/

Предыдущие
№3 https://arhivach.cf/thread/301316/
№4 https://arhivach.cf/thread/369752/ или тонущий https://2ch.hk/pr/res/1126092.html (М)

Ответы225036238915247264265182275542276706283119283526286332289072290386295652

2 24 июня, 01:28 2 1216115

Пойму ли смысл жизни, изучив ассемблер?

Ответы216732

3 24 июня, 16:18 3 1216418

.. с прогой для бэкапа. Решил сделать такой алгоритм:
1 Мониторить папку на изменение
2 Таймер на 1-1,5 секунды
3 Проверка файлов
4 Если всё норм то бэкап
Куски кода уже готовы, кроме таймера. И сам смогу разобраться, просто лень какая-то, и пишу для переката.
Вот так не работает(изменение срабатывает):
invoke ReadDirectoryChanges, [_hFile], fni, MAX_PATH, FALSE, $10, tmp, NULL, NULL
invoke CloseHandle, [_hFile]
invoke SetTimer, 0, 0, 1500, 0
@@:
mov eax, [msg]
cmp eax, WM_TIMER
je @F
jmp @B
А как надо? Желательно попроще.

Ответы216640216733243336

sage 4 24 июня, 20:28 4 1216640

>>1216418
> А как надо? Желательно попроще.
А оконная процедура где? У тебя msg магически заполняется? А таймер зачем, если ты функцию синхронно вызываешь?

Ответы216652

5 24 июня, 20:42 5 1216652

>>1216640
Таймер, потому что игра мне не посылает сообщения о изменённых ей файлах. В процедурах плаваю. Это с заготовки из учебника:
;Диалоговая процедура
proc DialogProc hwnddlg, msg, wParam, lParam
cmp [msg], WM_CLOSE
je FreeDialog
cmp [msg], WM_INITDIALOG
Первое что пришло в голову, это проверить msg на наличие WM_TIMER.

Ответы216745

6 24 июня, 22:35 6 1216732

>>1216115
>Пойму ли смысл жизни, изучив ассемблер?

Ассемблер - абстракция над системой команд процессора. Плюс некий синтаксис для описания данных.

Короче, говоря об ассемблере, сначала имей в виду систему команд (x86, arm, MIPS, etc) а затем версию транслятор, ибо даже для одних тех же процессоров синтаксис и нотация может отличаться.

7 24 июня, 22:36 7 1216733

>>1216418

Писать на языке высокого уровня такие вещи надо.

Ответы216745216755216796

sage 8 24 июня, 22:45 8 1216745

>>1216652
> Таймер, потому что игра мне не посылает сообщения о изменённых ей файлах
Еще раз повторяю: ты вызываешь ReadDirectoryChanges синхронно. Она зависает, пока не произойдут запрошенные изменения. А раз так, таймер тебе зачем? Жди изменений в отдельном тредике, например.

> Первое что пришло в голову, это проверить msg на наличие WM_TIMER.
Почитай про оконные сообщения хоть что-нибудь. Чтобы обработать сообщение, тебе нужно отдать контроль либо своему циклу обработки сообщений (GetMessage/DispatchMessage) либо, если у тебя DialogBoxParam - обратно в DialogBoxParam (там тоже крутится такой же цикл обработки), тогда при обработке DispatchMessage система вызовет твою оконную/диалоговую процедуру с этим сообщением в параметре msg. Т.е., чтобы получать сообщения таймера, который ты создал функцией SetTimer, тебе нужно сначала завершить обработку текущего сообщения и выйти из своей DialogProc - никаким иным магическим способом WM_TIMER в msg не попадет.

>>1216733
Двачую этого. Если вся программа сводится лишь к подергиванию Windows API, на Си это можно сделать с гораздо меньшим количеством боли. Исключение - всяческие нестандартные инжекты, хуки и патчи, которые как раз на асме реализуются быстрее и красивее.

9 24 июня, 22:51 9 1216755

>>1216733
Блать, нахуя? У меня всё есть говорю же, остался только таймер. Чё сложного вызвать функцию ReadDirectoryChangesW, если есть изменение то передать управление в блок/процедуру бэкапа, если нет то вызвать функцию messagebox с параметрами sysmodal. И наверняка моя прога будет быстрее и меньше чем высокоуровневая. и конечно же это ощущения кайфа, от того что ты можешь сделать всё что угодно с информацией

Ответы216783

10 24 июня, 22:57 10 1216759

А изюменкой на торте будет логотип игры в окне проги, он будет внутри экзешника. Знаете как я это сделаю? Тупо скопирую из hex-редактора данные и вставлю это как строку байт, из программы сделаю createfile, который заполню этой строкой байт, а потом уничтожу. Круто?

Ответы216793

11 24 июня, 23:24 11 1216783

>>1216755
>И наверняка моя прога будет быстрее и меньше чем высокоуровневая.

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

Ответы216793

sage 12 24 июня, 23:38 12 1216793

>>1216783
> Т.ч. слово "наверняка" я бы опустил
Для редкоиспользуемых архитектур - да. На x86/ARM компилятор обгоняет обычного я-у-мамы-ассемблерщика со свистом и слегка посасывает только на SIMD, да и то не у всех. При этом сишный код можно без проблем модифицировать, а в ассемблерном при каких-то изменениях ручные оптимизации начинают отваливаться, иногда приходится переписывать всю функцию целиком. Нахуй так жить?

>>1216759
> Знаете как я это сделаю?
Нихуя не понял, но звучит как максимально бессмысленное извращение.

Ответы216845

13 24 июня, 23:40 13 1216796

>>1216733
И откуда я знаю. Вот у меня есть в папке save 100 файлов, игра делает сохранение. Где, что, сколько? Наверняка в высокоуровневых языках есть точное условие.

Ответы217004

14 25 июня, 00:22 14 1216845

>>1216793
>Нихуя не понял, но звучит как максимально бессмысленное извращение.
Ну я делаю диалоговое окно из шаблона. Чтобы сделать его с картинкой, нужно чтобы эта картинка была. А я, объёбывая систему, копирую байты этой картинки в строку байт. Во время исполнения программы, создаю файл пикчи и делаю диалоговое окно из шаблона, потом файл пикчи уничтожаю.

Ответы216858217004

sage 15 25 июня, 00:35 15 1216858

>>1216845
>Чтобы сделать его с картинкой, нужно чтобы эта картинка была
Кладешь картинку в ресурсы, кладешь в диалог STATIC c SS_BITMAP и именем ресурса с картинкой, не пишешь ни строчки кода (каждый первый редактор ресурсов в такое может). Ну или кладешь байтики прямо в бинарник, потом CreateBitmapIndirect/SendMessage(..., STM_SETIMAGE, ...) если хочется без ресурсов. Или StretchDIBits, если хочется в жопу, и чтобы было максимально больно.

Ответы216893

16 25 июня, 01:04 16 1216893

>>1216858
Спасибо, ты как всегда крут. Но мне нужен таймер - простое решение, чтобы прога останавливалась на секунду.

Ответы216895217004

17 25 июня, 01:10 17 1216895

>>1216893
Я сказал именно то что хотел сказать.

53 Кб, 1205x870
18 25 июня, 08:52 18 1217004

>>1216796
>Вот у меня есть в папке save 100 файлов, игра делает сохранение. Где, что, сколько?
Всё будет так же, как и на ассемблере, только гораздо проще. Вот тебе скрин из моей ранней попытки написать что-то полезное. Здесь асинхронно всё делается, один поток ждёт изменений, а другой поток это изменение обрабатывает, чтобы было максимально быстро. Т.к. это была ранняя попытка что-то писать, не учитывалось условие, что количество одновременно отслеживаемых директорий должно быть меньше 64 и прочие недочёты в виде двух структур. Уже и не вспомню, зачем их две, а не всё в одной. Но сейчас пишу ещё хуже.
>>1216845
>объёбывая систему
Нет, только себя.
>>1216893
>чтобы прога останавливалась на секунду
Sleep(1000);
Не?

Ответы217006217062

19 25 июня, 08:55 19 1217006

>>1217004
>Уже и не вспомню, зачем их две, а не всё в одной
Для WaitForMultipleObjectsEx, как оказалось.

20 25 июня, 10:43 20 1217062

>>1217004
И? Ты только что доказал мне что высокоуровневые языки плохо влияют на чел. мозг(без обид). Лови мысль, игра начинает сохранение, изменяет первый файл, второй файл, или как-то два файла одновременно. Когда нужно начинать делать бэкап? Игра же мне не вышлет сообщения: я сохранилась, можно делать бэкап.

Ответы217107224814

21 25 июня, 10:55 21 1217066

Для решения одной задачи нужно было изучить язык lua. Потратил полпачки бумаги и хз сколько тонера на распечатку, сел читать и... nil это ничто, nil это не ноль, nil это ничто. Чего блять? Это как нужно выебать свой мозг, чтобы в нём поместилось nil - это ничто? На этом эксперимент был закончен, уж лучше старым дедовским способом - через тернии к звёздам.

22 25 июня, 12:36 22 1217107

>>1217062
>высокоуровневые языки плохо влияют на чел. мозг
Нет. Это из-за отсутствия соответствующего образования и работы над каким-то проектом в команде, когда полученные знания можно применить на практике. Кто-то может и без этого обойтись. У меня не получилось. Пишу-пишу, написал, работает. Лучше туда больше не соваться.
>Когда нужно начинать делать бэкап?
Точно в тот момент, когда и ты будешь делать бекап в своей программе. Логика не изменится, разной будет реализация. WinAPI используется один и тот же. Для этой задачи, возможно, C++ будет лучшим решением с его std::map и другими контейнерами. Что у тебя там за игра? Несколько файлов на одно сохранение? Получили изменения, записали в контейнер, используя имя файла без расширения как ключ. Когда получили все изменённые файлы сейва, делаем их бекап. Даже многопоточность не нужна, достаточно будет одного главного потока.
>игра начинает сохранение, изменяет первый файл, второй файл, или как-то два файла одновременно
И ничего не пропадёт. Все изменения будут получены из ReadDirectoryChangesW, сколько бы одновременно их не изменялось/создавалось. Ты же сам будешь использовать эту функцию. Считаешь, что на каком-то C++ или даже питоне всё будет исполняться настолько медленно, что программа не получит некоторые сообщения об изменённых файлах?

Ответы217206

23 25 июня, 13:07 23 1217117

>>1215213
Бамп.

24 25 июня, 15:30 24 1217206

>>1217107
>Точно в тот момент, когда и ты будешь делать бекап в своей программе. Логика не изменится, разной будет реализация. WinAPI используется один и тот же.
Да ты тут не прав. Это не будет работать чисто логически. Ты не знаешь тот момент времени в которой игра перестанет делать сохранение, и игра тебе это не сообщит.
Тут дальше последствие высокоуровневых языков.

Ответы217212217216

25 25 июня, 16:52 25 1217212

>>1217206
>Тут дальше последствие высокоуровневых языков.
И ты тут такой выезжаешь на белом коне и объясняешь мне, при чём тут высокоуровневый язык и как в asm ты будешь это определять, что это можно сделать только с помощью низкоуровневого языка.

Ответы217216

26 25 июня, 17:03 26 1217216

>>1217206
>>1217212
Два дебила - это сила.

Ответы217228

27 25 июня, 17:35 27 1217228

>>1217216
Лучше сделайте код простого таймера :3

Ответы217232

28 25 июня, 17:54 28 1217232

>>1217228
>код простого таймера
А таблицу умножения на 3 тебе не сделать, дурачок?

Ответы217249

29 25 июня, 19:03 29 1217249

>>1217232
Раз это так просто, то почему это так сложно?

Ответы217259

30 25 июня, 19:04 30 1217252

дзеееен

31 25 июня, 19:16 31 1217259

>>1217249
>это так просто
Для меня.
>это так сложно
Для тебя.

^_^

Ответы217342217371

32 25 июня, 20:54 32 1217342

>>1217259
Ну ладно, а если я тебе скажу что эту прогу я делаю для субнаутики с её 41-м багом(и может быть она решит и другие проблемы). Код уже есть, осталось копипасте, и когда выйду из пике то сделаю таймер. Лавров мне не надо, а ты играешь в Субнаутику?

Ответы217374

33 25 июня, 21:47 33 1217371

>>1217259
ОПАНЬКИ. Такой исход ты не предвидел. Чё не смеёшься, не смешно, не понял? А я поясню тебе в каких текстурах ты застрял. Субнаутика - лучшая игра 2018-го года, имеет неисправимый баг с пропаданием сюжетных вещей, это происходит когда игра выгружает хуйню заместо сохранения. И где ты? В каких высокоуровневых текстурах застрял?
Я да, накатил, но я наоборот за мир дружба жевачка.

Ответы217374

34 25 июня, 21:51 34 1217374

>>1217342
>>1217371
Так всю жизнь и проиграешь.

Ответы217378

35 25 июня, 21:59 35 1217378

>>1217374
плез

36 25 июня, 22:20 36 1217396

Ну для Субнаутики то давайте сделаем, ёбаный вы врот
https://www.youtube.com/watch?v=_7BzngvURrk
Она на коленке делается и стоит 300 рублей, весь мир ждёт пока вы тут дурака валяете. Я не буду себя упоминать, могу сказать что вот привет от 2ch.hk/pr
Остался только таймер.

37 27 июня, 13:17 37 1218244

Лучший дизассемблер на линукс - это ...?

Ответы218280

sage 38 27 июня, 14:23 38 1218280

>>1218244
> это ...?
Это IDA Pro и wine для всего остального. Под линукс нет нормальных инструментов для реверсинга: нет отладчика для людей, нет дизассемблера, даже хекс-редактора нормального нет. radare2 пыжится-пыжится, все на него молятся-молятся, но реверсить в нем - это как редактировать текст в виме - такое себе удовольствие.

Ответы218716221287

39 27 июня, 17:59 39 1218402

ptv

40 28 июня, 09:48 40 1218716

>>1218280
>IDA Pro
Установил. А там только посмотреть код в структурированном виде можно? Больше ничего нельзя? Редактировать, например.
>нет отладчика для людей, нет дизассемблера
Даже какого-нибудь GUI поверх GDB нет?
>radare2
Спасибо, посмотрю.

Ответы218732218743226521

41 28 июня, 10:26 41 1218732

>>1218716
есть гуя поверх radare Cutter, но они еще прибивают гвоздями дебаггер и некоторые штуки из радара в гуй

Ответы218744292135

sage 42 28 июня, 10:50 42 1218743

>>1218716
> Редактировать, например.
Тебе пишут файловый офсет инструкции слева внизу окна с дизасмом. Есть Edit->Patch program, в том числе и с ассемблером для некоторых архитектур (можно плагины поставить для других), есть даже сохранение, если дело касается .exe (не помню, работает ли с .elf). Но пользоваться этим не советую, там есть всякие тонкости вроде релоков, поэтому патчи чем-нибудь внешним лучше.

> посмотреть код в структурированном виде можно
Пробел, Tab.

> Даже какого-нибудь GUI поверх GDB нет?
Есть, но там изо всех щелей ползет gdb. Пользователи Linux не могут в UI. Можно было бы пользоваться связкой IDA+gdbserver, но для этого нужно слишком много телодвижений.

Ответы218825

sage 43 28 июня, 10:51 43 1218744

>>1218732
Всегда проигрываю с того, что вроде бы сделали гуй, а всякие хинты control flow нарисованы псевдографикой.

44 28 июня, 14:09 44 1218825

>>1218743
Это шарит.

45 29 июня, 06:00 45 1219294

10 Кб, 302x40818 Кб, 322x41316 Кб, 625x723

Помогите вонаби крякеру.
Прохожу туториал от CheatEngine
Вот есть код, который в EAX записывает то, что хранится в памяти по адресу, который записан в Tutorial-i386.exe+201630
Потом берётся это самое, что там получилось и берётся то, что хранится в памяти, которая находится по адресу, который мы записали в EAX перед этим.
И там уже наше значение 46 из туториала.
Пиздец в общем.

Так вот. Почему на первом скрине
Tutorial-i386.exe+201630 = 0178A5C8 - то, что надо. Там и хранится 46
А на втором скрине
Tutorial-i386.exe+201630 = 00B0707D - вообще не то. Как так?
Почему одно и то же сложение адресов даёт разные результаты?

Tutorial-i386.exe = 00905A4D
00905A4D + 201630 = B0707D (посчитал в калькуляторе) - как на втором скрине. Тогда получается в первом кривая математика. А как тогда там считается?

Ответы219296219301219304219413

2 Кб, 212x172
46 29 июня, 06:10 46 1219296

>>1219294
Нихуя не понял. В нижнем поле плюс вообще не плюс а какая-то магия.
Я думал "Tutorial-i386.exe+4" это "взять адрес начала памяти процесса в оперативке" и "отступить 4 байта". А получается 00000003. 3 байта от начала оперативки? При добавлении 4? Как? Что? Чего вообще?

Ответы219301219304219413

57 Кб, 696x539
47 29 июня, 06:35 47 1219301

>>1219294
>>1219296
Ааааа, я пооооняяяял.
Это адрес в файле, а не памяти.
Так бы сразу... Теперь всё понятно и сходится.

Ответы219304

27 Кб, 737x264
48 29 июня, 06:54 48 1219304

>>1219301
Правда я хексом открыл файл и вообще не могу найти там то, куда указывал Tutorial-i386.exe+201630
Вот если взять с этого >>1219296 первую строку 00905A4D, перевернуть в 4D5A9000, то я нахожу это в самом начале файла.
А если взять 0178A5C8 с первого скрина >>1219294 и перевернуть в C8A57801, то в файле ничего такого нет.
По адресу 0x201630 (а в CheatEngine используется 0х, я проверил) используются одни 0xFFFFFFFFFFFFFFFFFF
Так это всё таки адрес в файле или не файле?
Я опять ничего не понимаю.

Ответы219413

sage 49 29 июня, 11:39 49 1219413

>>1219296
> Я думал "Tutorial-i386.exe+4" это "взять адрес начала памяти процесса в оперативке" и "отступить 4 байта".
И прочитать значение, прочитать забыл. Справа у тебя там значение. Вот эти байтики (little-endian, 4-байтовые целые числа читаются задом наперед): 4d 5a 90 00 03 00 00 ... (MZђ....) - это заголовок, самое начало любого .exe-файла, сигнатурку MZ отовсюду видать. Соответственно,

>>1219294
На втором пике ты читаешь мусор, т.к., MZ - это явно не то, что тебе нужно. А на первом пике у тебя 201630 уже не заголовок, а середина образа, правильное смещение какого-то дворда, в котором лежит какая-то переменная.

>>1219304
> Правда я хексом открыл файл и вообще не могу найти там то, куда указывал Tutorial-i386.exe+201630
Офсеты в файле практически никогда не совпадают с офсетами в памяти. При загрузке файл не просто копируется в память - разные куски файла кладутся по разным адресам, по некоторым адресам просто кладутся нули, некоторые части файла вообще не попадают в память. Все это описано в таблице секций файла, поэтому чтобы по виртуальном адресу (в памяти) узнать файловый офсет, нужно пройтись по таблице секций, узнать, в какой секции этот адрес, ну и там дальше уже считать. Как-то так.

141 Кб, 1366x768
50 29 июня, 16:16 50 1219597

Отладчик 64dbg
Проблема в остановки процесса из за исключений , все настройки переебал. Все равно на каждом исключении останавливает процесс. Подскажите как быть.
Как пример даю скрин с рандомного приложения.

Ответы219608

sage 51 29 июня, 16:27 51 1219608

>>1219597
А ты хочешь, чтобы исключения в программу летели? При исключении идешь в третью вкладку у тебя на скрине, говоришь "Добавить последнее".

Ответы219622

sage 52 29 июня, 16:43 52 1219622

>>1219608
Хочу чтобы пролетало все кроме моих бряков.

53 30 июня, 17:57 53 1220150

758 Кб, 2143x1160108 Кб, 1074x489209 Кб, 1573x627

Вопрос по 7му левлу CE.
Вот я делаю code injection, как я понял он меняет инструкцию на:
JMP newmem
Где newmem это уже наш код, который размещается в свободном участке памяти.
И этот код в "Auto assemble" не настоящий ассемблер, да? Это язык самого CE, из которого он уже составляет код ассемблера и вставляет его в память. Пик 2.
Так?
Получается alloc(newmem,2048) говорит CE - найди мне 2кб свободной памяти где-нибудь. И дальше в "лейбле" newmem мы можем писать код, ассемблер код которого, будет меньше 2кб. Плюс в этот код будет добавлено то, что в лейбле originalcode.
Плюс будет то, что в лейбле exit, где returnhere это адрес в который надо вернуться из нашей новой памяти. В старую память, которая шла после оригинального кода.

3й пик - после выполнения кода авто ассеблера CE.
Ещё я вот смотрю в новый код, который получился, он с адреса 01730000 до 01730FFF, получается 4095. Но одна команда где мусор занимает сразу 2 байта получается, значит всё правильно.
Первые 3 строки наш код, остальные add [eax],al
Это просто мусор, который в памяти выглядит как нули. "00 00" означает "add [eax],al". Так?

add dword ptr [ebx+00000478],02 в памяти выглядит как 83 83 78 04 00 00 02
sub dword ptr [ebx+00000478],01 в памяти выглядит как 83 AB 78 04 00 00 01
jmp Tutorial-i386.exe+25864 в памяти выглядит как E9 51 58 CF FE

В общем я всё правильно понял (как это всё работает) или всё не так?
Я знаю что там надо удалить sub или делать add 3 чтоб пройти туториал, я уже прошел

Ответы220319220341

sage 54 30 июня, 21:12 54 1220319

>>1220150
> не настоящий ассемблер, да?
Вполне себе нормальный ассемблер.

> Плюс в этот код будет добавлено то, что в лейбле originalcode.
Подозреваю, что ему абсолютно похуй, как ты все это назовешь, и что конкретно там будет. Важны только метка "Tutorial..." и метка newmem. Но если тебе, например, пропатчить sub на nop или на add, а не добавить еще код, то можно пропатчить поверх существующего кода, и ничего выделять не нужно.

> "00 00" означает "add [eax],al". Так?
Да. Но туда управление не попадает, поэтому можешь хоть db "Hacked by Vasyan" туда написать.

Ответы220324

55 30 июня, 21:16 55 1220324

>>1220319
>Вполне себе нормальный ассемблер.
Ну в смысле строка "alloc" никак не попадает в память программы. Как и все label и всё остальное. То, что я пишу в окно "Auto assembly" не попадает в память игры. Этот код обрабатывает CE и уже заносит в память игры то, что он там вычислил. В моём случае это jmp, nop, nop и по новому адресу остальной код. Но не всё 1 в 1 как было в "Auto assembly". Там не всё ассемблер в этом окне.

Ответы220341

sage 56 30 июня, 21:26 56 1220341

>>1220150
> получается 4095.
Забыл на это ответить. Если пользоваться относительно низкоуровневыми API (а CE ими пользуется), то выделять память можно только блоками, чей размер кратен размеру страницы. Страницы в x86 по большей части 4к (4096 байт), есть еще large pages, но они к делу не относятся. Поэтому когда ты попросил 2к, тебя округлили до границы ближайшей страницы и дали 4к сразу. А то, что 4095, это ты обсчитался: да, fff - это 4095, но мы-то считаем не от 1, а от нуля, и с нулем будет 4096. Ошибка на единицу в диапазонах - классический проеб.

>>1220324
> Ну в смысле строка "alloc" никак не попадает в память программы.
Называется "директива ассемблера". У всех ассемблеров они разные, в зависимости от области применения.

23 Кб, 960x500
57 2 июля, 16:16 57 1221287

>>1218280
>даже хекс-редактора нормального нет
Есть HTE, он же HT Editor, он же просто HT. Для битхака подходит не хуже хиева, еще и позволяет выбрать способ ассемблирования инструкции.

Ответы221420

58 2 июля, 16:39 58 1221300

Анчоусы, поясните про всю движуху демосцен, которая была в 2004 году.
https://www.youtube.com/watch?v=MunG3hrijyY

Про все эти контесты в 4к, 64к. Я сам это помню отдаленно из журналов Игромании. Вот сейчас дико захотелось во все это вкатиться, но где черпать инфу? Где вся движуха в коммьюнити?

Ответы224935304627

sage 59 2 июля, 19:31 59 1221420

>>1221287
> не хуже хиева
Посмотри на 010 Editor и сравни. Хиев тоже ни на что сложнее запатчивания jne не способен. Но меня тут недавно ткнули носом в GNU Octeta, так что хекс-редактор таки есть.

Ответы221451

60 2 июля, 20:16 60 1221451

>>1221420
Базара нет, чисто для хекса и для разбора структур в хексе 010 лучше. Но у меня специфические запросы - наличие дизассемблера с ассемблером и работа с популярными форматами исполняемых файлов - Macho-O, PE, ELF и так далее. Обычных хекс редакторов различной степени фичастости навалом, хекс редакторов с перечисленным функционалом, окромя Хиева и HT нет. Был еще biew, впоследствии переименованный в beye, но он благополучно загнулся.

61 8 июля, 11:08 61 1224371

Сайт с хекс кодами опкодов х86
http://sparksandflames.com/files/x86InstructionChart.html

пиздец, где капча?

Ответы224390224674

62 8 июля, 12:36 62 1224390

>>1224371
Там только однобайтовые опкоды. И... зачем? Точно такая же табличка есть в Intel SDM.

63 8 июля, 19:08 63 1224674

>>1224371
>пиздец, где капча?
Из гугла выйди, нуб. И включи нормальную капчу в настройках, чтобы не искать апельсиныю

Ответы224918

64 9 июля, 00:45 64 1224814

>>1217062
Лол блядь, а что в ассемблере можно использовать специальную инструкцию цопе, которая определяет было ли сохранение?
Ты понимаешь, что все что можно сделать на ассемблере можно сделать и на языке более высокого уровня, ты как будто считаешь ассемблер какой-то универсальной отмычкой.
В реальной разработке ассемблер используют достаточно редко, в основном только там, где без него никак не обойтисьнапример работа с регистрами
Я тебе даже больше скажу, если ты будешь писать то, что хочешь на си, это мало того что работать будет лучше и быстрее, т.к. компилятор лучше тебя знает, как и где какие инструкции нужно использовать, ты ещё и сам код напишешь в разы быстрее.
мимо-пишу-дрова-под-линукс

Ответы225298225576225792

65 9 июля, 09:35 65 1224918

>>1224674
Спасибо)

66 9 июля, 10:33 66 1224935

>>1221300
Старые журналы Хакер. Chaos Communication Congress, Chaos Construction

67 9 июля, 10:35 67 1224937

Баг хантеры есть в треде?

68 9 июля, 14:15 68 1225036

>>1216107 (OP)
Пагни, нихуя не знаю нихуя не умею, помогите.

Ответы225037

69 9 июля, 14:17 69 1225037

>>1225036
Блять
В книге Юричева дается адрес сайта с разными коньпеляторами, чтоб смотреть вывод их на асме. Но я там не нашел как генерировать код для 32х битной машины, от выплевывает асм для 64

Ответы225118

70 9 июля, 16:51 70 1225118

>>1225037
godbolt.org? -m32 -masm=intel в строку опций компилятора справа вверху, очевидно же.

Ответы225253

71 9 июля, 21:24 71 1225253

>>1225118
Мерси!

72 9 июля, 22:31 72 1225298

>>1224814
Зачем мне спорить с высокоуровневым дурачком? Ты даже не можешь понять что мне нужен только таймер, а ты мне хуй помог, вот и всё, вся логика.

Ответы225305

73 9 июля, 22:41 73 1225303

Хочу сделать скворечник, нехватило гвоздя. Дай если есть. НЕТ, читай толмуты как строить суперскворечники, потом дам тебе гвоздь. Гвоздя нет, скворечника нет, ИТОГ.

sage 74 9 июля, 22:42 74 1225305

>>1225298
Лол, то есть за две ебаных недели до тебя так и не дошло, что таймер в твоей задаче не нужен?

Ответы225318

18 Кб, 332x230
75 9 июля, 23:13 75 1225318

>>1225305
Да ты сначала дай, потом уже будет видно нужен или нет.
Там сейчас 163 файла, я не знаю сколько их может быть, может 500, а может 1000 к концу игры, тем более игра специфичная. Или предлагайте свой алгоритм бэкапа.

Ответы225327

sage 76 9 июля, 23:27 76 1225327

>>1225318
Тебе уже писали выше:
CreateThread(..., changes_listener, ...);
...

void changes_listener(LPVOID arg) {
while (ReadDirectoryChangesW(...)) {
перебираем изменения в буфере, делаем, что нужно
}
}
Со всей обработкой ошибок и обработкой изменений это от силы строчек 50 на Си и куча бессмысленной жопной боли на ассемблере.

Ответы225333

77 9 июля, 23:34 77 1225333

>>1225327
Когда в этом коде начинается непосредственно сам бэкап? После каждого изменения?
Бэкап чего? Одного файла? А если этот файл сбэкапился нормально, а в следующем ошибка, тогда что?

Ответы225337

sage 78 9 июля, 23:38 78 1225337

>>1225333
> После каждого изменения?
Почему бы и нет? Можешь пачку набирать себе в очередь, логика не меняется.

Ответы225342

79 9 июля, 23:43 79 1225342

>>1225337
Да почему не меняется то? У меня тогда в бэкапе будет каша, половина нового, половина старого. Зачем мне такой бэкап? И даже с высокоуровневыми очередями не ясно когда эта очередь должна закончиться, тем более я не знаю сколько файлов там вообще может быть.

80 9 июля, 23:49 80 1225343

У меня на асме простой алгоритм:
После первого изменения в папке программа ждёт, потом проверяет файлы на правильность, затем бэкап. Если нет то ошибка. Это сложнее вашего варианта чтоли?

81 10 июля, 00:04 81 1225353

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

82 10 июля, 15:30 82 1225576

>>1224814
пишу длинную арифметику на асме, ибо быстрее

Ответы225656

83 10 июля, 18:19 83 1225656

>>1225576
Быстрее по сравнению с чем?
Насколько быстрее сравнению с Си с -o2?
Всякие математические библиотеки, в том числе для длинной арифметике часто на ассемблере пишут, но только те 20%, которые отвечают за 80% производительности. И для этого нужно гуру ассемблера быть, знать, какая инструкция сколько тактов выполняется и т.п.
Кстати, их использование наверняка оптимальнее самописного кода.

Ответы226588

84 10 июля, 21:11 84 1225792

>>1224814
>все что можно сделать на ассемблере можно сделать и на языке более высокого уровня,
Нихуя. Такое мог сказать только васян, который не работал плотно с андоками и со всякими системными "мелочами". Попробуй-ка изменить gdtr из-под си без асма

Ответы225794225800

85 10 июля, 21:13 85 1225794

>>1225792
а в асме надо будет только lgdt исполнить

sage 86 10 июля, 21:21 86 1225800

>>1225792
> Попробуй-ка изменить gdtr из-под си без асма
В Visual Studio уже пару десятилетий есть интринсик _lgdt(). Охуеть, правда?

Ответы226984

87 10 июля, 23:09 87 1225867

Там умелец видео выложил, как денуво V4 взломал. Вам надо?
https://xakep.ru/2018/07/09/voksi-denuvo-crack/
https://www.youtube.com/watch?v=Ka_PudOvWpI

Ответы225872

sage 88 10 июля, 23:17 88 1225872

>>1225867
Спасибо, поглядим.

89 12 июля, 08:56 89 1226521

>>1218716
> Даже какого-нибудь GUI поверх GDB нет?

Есть GEF:
https://github.com/hugsy/gef

Я его не пробовал, но с виду попытка создать нечто, внешне похожее на Soft-ICE, неплохая.

90 12 июля, 12:34 90 1226588

>>1225656
На асме не вся реализация, а только та часть, которую на си писать либо неудобно, либо на си было бы очевидно медленнее из-за каких-либо неприятных изворотов.

тТак что да:
>но только те 20%, которые отвечают за 80% производительности

37 Кб, 1200x630
91 12 июля, 21:40 91 1226909

Я не пойму, я могу в асм. Так? так. Я не могу в высокоуровневые языки. Так? так. Вопрос: почему я должен изучать выскоуровневый язык чтобы решить задачу связанную с информацией? Если асм и есть причина того что эти задачи вообще появились. Где логика? Это не говоря уже о том что заучивать синтаксис это не программирование.
опять бухой кун с таймером

Ответы226944226983228075249208

92 12 июля, 21:46 92 1226914

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

93 12 июля, 22:46 93 1226944

>>1226909
>я могу в асм. Так? так. Я не могу в высокоуровневые языки. Так?
Ты какой-то странный. Какие проблемы в ЯВУ после ЯНУ?

Ответы226962

94 12 июля, 23:15 94 1226962

>>1226944
Мне это просто не нужно, бритва Оккама, с этим согласны все, но почти никто этого не делает.

95 12 июля, 23:20 95 1226966

ТЫ ПОНИМАЕШЬ? НЕ МНОЖЬ, СУКА ТЫ ЁБАНАЯ, СУЩНОСТИ. НЕ МНОЖЬ, ПАДЛА ТЫ ТАКАЯ. А ТЫ БЛЯТЬ ВСЁ МНОЖИШЬ И МНОЖИШЬ, ЕЩЁ И С УМНЫМ ВИДОМ ЧЁТО ПОЯСНЯЕШЬ.

96 12 июля, 23:45 96 1226983

>>1226909
>почему я должен изучать выскоуровневый язык чтобы решить задачу связанную с информацией
Потому что для любой мало-мальски содержательно задачи на ассемблере потребуется огромная простыня, чтобы написать её. Которую невозможно читать и отлаживать.

Ответы227322

97 12 июля, 23:48 97 1226984

>>1225800
может, в ней и cr регистры менять можно?

Ответы227021

sage 98 13 июля, 01:05 98 1227021

>>1226984
Да. Есть __readcrN/__writecrN, где N - номер регистра.

Ответы231752240538

99 13 июля, 16:10 99 1227322

>>1226983
У меня план такой - писать проги блоками, со временем будет много исходников в которых будут любые блоки. Мне нужно будет их только копировать и изменять под условия задачи, у меня будет больше степеней свободы, я выигрываю.

100 13 июля, 16:25 100 1227331

>Тип nil — это тип с единственным значением, nil, основная задача
которого состоит в том, чтобы отличаться от всех остальных значений.
Lua использует nil как нечто, не являющееся значением, чтобы
изобразить отсутствие подходящего значения.

Ещё, я не хочу размещать у себя в голове такие вот конструкции( скорее опасаюсь).
Я останусь при своём мнении, вы при своём, предлагаю закрыть этот вопрос. Я не хотел никого обидеть, просто пояснил за себя, потому что я буду тут оч. долго, для понимания вобщем.

101 14 июля, 16:57 101 1228075

>>1226909
>Вопрос: почему я должен изучать выскоуровневый язык чтобы решить задачу связанную с информацией? Если асм и есть причина того что эти задачи вообще появились. Где логика? Это не говоря уже о том что заучивать синтаксис это не программирование.
Иди Луговского-Ксеноцефала на sql.ru почитай, может это тебе мозги вправит. Ты мне напоминаешь юродивого, пытавшегося оппонировать ему в крестотреде. Тот тоже нихуя не знал, синтаксис путал с семантикой, не понимал, зачем нужны разные языки и парадигмы и, как положено люмпену, питал слабость к выпивке. Только он считал кресты "высшей ступенью в программизме", а ты копротивляешься за асм.

Ответы228243

54 Кб, 597x402
102 14 июля, 19:57 102 1228243

>>1228075
>как положено люмпену, питал слабость к выпивке.
https://www.youtube.com/watch?v=ZwyxoIYBxLg
Чем я вас так сильно зацепил? Почему нельзя оставить всё как есть? Я же всё объяснил. Я не считаю вашу позицию неверной, просто у меня другая позиция.
То что я иногда обзывался? Потому что бухой был, а у меня пьяного шифер капитально сползает(поэтому пытаюсь реже бухать).
Почитаю

32 Кб, 684x361
103 17 июля, 20:33 103 1230094

Ребят, такую задачку мне поставил интерес.
Есть android игра (dream league soccer 2018), в которой прогресс сохраняется в пользовательском пространстве в двух (судя по всему 1 проверочный) файлах. В profile.dat , содержатся структуры и данные всего профиля, которые можно осмысленно редактировать hex редактором. profile_cld_u же, мне кажется, является упакованным profile.dat предыдущего матча (они перезаписываются после каждой завершенной встречи).
Один раз, когда я изменил кол-во денег профиля, как мне показалось, игра скорректировалась и загрузила предыдущий сейв (потому грешу на profile_cld_u).
Мне хотелось бы понять, что из себя представляет profile_cld_u, и как с ним совладать. Я на пикриле некий паттерн байтов, который я заметил, мб в нем магическое число?

P.S Алсо я нашел референсы на profile_cld_u и profile в статических либах, но может пока можно что-то сделать без иды?
Потому что я пока не разбираюсь в ARM

Файлы: http://rgho.st/8sbn2lYwr

Ответы230194

sage 104 17 июля, 23:50 104 1230194

>>1230094
Вряд ли без иды что-то сделаешь. Но не нужно смотреть именно дизасм, в IDA есть HexRays, он показывает сишный псевдокод. Просто добавь воды нажми Tab на интересующей функции.

На пике в выделении какие-то явные офсеты (32 бита, little endian), по 0x08 возможно какой-нибудь CRC. Файлы может быть гляну завтра но обещать не буду, если ты сам что-нибудь не накопаешь.

Ответы230281230386

105 18 июля, 09:39 105 1230281

>>1230194
Спасибо, я посмотрю, не знал о такой функции.

Я еще нагуглил 78 da - флаг максимальной компрессии zlib, должно стать полегче)

Там же и интересную вещь нашел:
http://zenhax.com/viewtopic.php?t=27

51 Кб, 664x590
106 18 июля, 14:51 106 1230386

>>1230194
Теперь с большой вероятностью могу сказать, что это упакованный сейв, но есть некоторые несостыковки

Ответы230736

sage 107 19 июля, 00:43 107 1230736

>>1230386
Молодец. Там в .so-шке куча экспортированных символов, так что можно брать иду и смотреть на всякие там CFTTSaveFile::BeginLoadInternal и подобные. Правда, там кресты и виртуальные функции, но даже если с ними не совладаешь, то может имена методов что-то подскажут.

108 20 июля, 16:50 108 1231752

>>1227021
Еба, юзабельно во всяких поделках. Хотя обычно подобные модули на асме пишутся полностью

Ответы232067

sage 109 21 июля, 00:02 109 1232067

>>1231752
> во всяких поделках
Винда - поделка. Ну ок.

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

110 21 июля, 23:16 110 1232592

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

Ответы232623

sage 111 22 июля, 00:20 111 1232623

>>1232592
> Может ли приложение узнать читают ли его память?
В целом нет. От приложения с админскими правами и ReadProcessMemory не защититься без драйвера. Но на каждый драйвер тоже можно написать свой драйвер с трюками вплоть до DMA.

> И кто в этой битве имеет аппер хенд?
Никто. При равном уровне привилегий побеждает более хитрая жопа. При различном - тот, у кого привилений больше.

Ответы232640234097

707 Кб, 800x600
112 22 июля, 00:54 112 1232640

>>1232623
Спасибо.

12 Кб, 590x170
113 23 июля, 10:04 113 1233394

Извините за тупой вопрос, но как процессор определяет как ему работать с первым битом? Считать его информационным или знаковым как на пике?

Ответы233552233677233678

114 23 июля, 11:03 114 1233436

https://ideone.com/UPoLKt
Вот есть пример кода. Почему все переменные объявляются после кода? Это из-за разделения в досе на сегменты кода и т.п.? Если это так, то как здесь понять, что начинается сегмент данных или я хуйню несу.

Ответы233678

115 23 июля, 15:04 115 1233552

>>1233394
Никак. Поскладывай в столбик различные числа и ты поймешь почему так.

116 23 июля, 20:14 116 1233677

>>1233394
Никак он не определяет, это не баг это фича.

Вообще дополнительный код(на твоей пикче это -5) был спецом так разработан, чтобы беспалевно складывать числа без учета их знака и получать всегда правильный результат: для прямого кода - сумму, для дополнительного - разность. То есть с точки зрение проца вычитание это тоже сложение.

117 23 июля, 20:15 117 1233678

>>1233394
> как процессор определяет как ему работать с первым битом
Ему в целом похуй, все зависит от твоей интерпретации этого числа, т.е., от самого кода (и от инструкций - для знакового умножения/делении отдельные инструкции).

>>1233436
> Почему все переменные объявляются после кода?
Потому что если их объявить до кода, то процессор начнет их выполнять (в данном случае).

> Это из-за разделения в досе на сегменты кода и т.п.?
В самом досе разделения на сегменты кода и данных нет. Есть просто сегменты. Разделение может существовать в программах (.exe), но твоя программа .com, судя по org 0100h, т.е., она целиком влезает в один сегмент, грузится и начинает выполняться по офсету 0100h (до него лежит PSP). Данные ты можешь положить куда угодно. Можно, например, делать даже так:
org 100h
jmp real_start
foo dw ?
bar dw ?
real_start:
mov ax, 4c00h
int 21h
Лишь бы твои переменные были вне потока выполнения.

118 23 июля, 21:23 118 1233742

Ребят, читаю криса касперски, он говорит про апи-шпиен керберос, я его скачал, запустил, а он винрарный nag никак в лог не выводит, что за хрень? Слишком новая винда?

Ответы234196234276

104 Кб, 715x687
119 23 июля, 22:23 119 1233778

Нука поясните. Вот есть игра, есть код, который пишет жизнь персонажа.
Этот код отрабатывает и для жизни мобов. Если я там делаю nop, то я убить не могу никого.
>mov [r9+00000388],r8d
[r9+00000388] это адрес жизни того, кто пострадал. r8d это новое количество HP значит.
Как мне теперь сделать так, чтоб жизнь не отнималась только у моего персонажа?
Это mov надо заменить на jmp в пустое место и там прописать код, который будет проверять:
Если адрес r9+00000388 это адрес жизни нашего персонажа, то ничего не делать. А если чужой адрес, то выполнить mov [r9+00000388],r8d
Да? Или нет?
Сложно пиздец. Нихуя не понимаю.

Ответы233783233797

120 23 июля, 22:28 120 1233783

>>1233778
И кстати, что такое r8d?
Есть регистр r8, а что такое r8d?

Ответы234104

sage 121 23 июля, 22:50 121 1233797

>>1233778
r8 - 64-битный регистр, r8d - его младшие 32 бита (dword), r8w - младшие 16 бит (word), ну и есть еще r8l - младшие 8 бит. Как rax, eax, ax и al.

Тебе нужно смотреть выше. Видимо, в r10d в первой инструкции кладется индекс персонажа, и для твоего персонажа он скорее всего фиксированный (или его где-то можно узнать). Вот его и проверяй.

122 24 июля, 12:54 122 1234097

>>1232623
>Никто. При равном уровне привилегий побеждает более хитрая жопа. При различном - тот, у кого привилений больше.
Жизненно.

123 24 июля, 13:10 123 1234104

>>1233783
>Есть регистр r8, а что такое r8d?

Младшая 32бит-половина.

124 24 июля, 16:02 124 1234196

>>1233742
ПАМАГИТЕ и мне, пожалуйста :)

125 24 июля, 19:37 125 1234276

>>1233742
>апи-шпиен керберос
Шо за говно мамонта? Крис конечно хороший парень, но мёртвый писал давно, так что софт нужно гуглить отдельно (кроме иды).

126 24 июля, 23:42 126 1234423

LXI H,0100H
LXI D,02FFH
Start
MVI M,00H
INX H
MOV A,H
SUB D
JNZ Start
MOV A,E
SUB L
JNZ Start
MVI M,00H
HLT

Собственно есть такая вот программа. Если здесь есть очень олдовые чуваки - думаю, узнают. Программа должна обнулять ячейки памяти с адресами от 0100 до 02FF. Проблема в том, что я понимаю как она работает только до 5 строчки.
Собственно непонятки:
Команда MVI M,00H должна помещать значение 00H в регистр М, но что это? В этом процессоре за исключением служебных и двухбайтовых их всего 7 - B C D E F H L.
Команда SUB D должна вычитать из регистра А аккумулятора значение регистра D и помещать результат в А. Уже лучше, но регистр D ранее не появлялся вообще.
Дальше вообще муть. Снова непонятно откуда взявшиеся регистры E и L.
Это программа ебанутая, или я что-то не до конца понимаю?

Ответы234440

sage 127 25 июля, 00:42 127 1234440

>>1234423
> Команда MVI M,00H должна помещать значение 00H в регистр М
В данном случае M значит "доступ в память (memory) по адресу (HL)".

> но регистр D ранее не появлялся вообще
Первые две строчки грузят константы в пары HL и DE cоответствено (load extended immediate). И INX там увеличивает не H, а HL. Остальное должно быть понятно. В псевдокод перепиши - разберешься.

Ответы234453234465

128 25 июля, 01:26 128 1234453

>>1234440
Псевдокод..?
Т.е. MVI M,00H записывает во второй байт HL нули, а первый байт - адрес ячейки памяти по команде LXI H,0100H? Как тогда определяется, что операнд команды MVI идет именно в HL?
Дальше. Команды

INX H
MOV A,H
SUB D
JNZ Start
MOV A,E
SUB L
JNZ Start

Прибавляют 1 к текущей ячейке создавая счетчик (в том же байте?), затем номер текущей очищаемой ячейки копируется в аккумулятор, зачем из аккумулятора вычитается адрес конечной ячейки. Если бы я писал это на С, то это был бы цикл if-else с явно видным условием продолжения вычитания (т.е. Goto Start) или же переходом на дальнейшие команды. Но тут этого нет. После вычитания SUB D идет команда JNZ. По идее, тут нужно было как-то задействовать флаг нулевого значения, иначе команда JNZ исполняется всегда. Как тут обстоит дело?

Собственно предположим что я понял/неявным образом флаг работает/особенности обработки кода - короче перепрыгнуло и перешло дальше. Регистр E задействован ранее не был, но я так понимаю, что в нем содержатся младшие биты конечной ячейки 02FF (как мне кажется - т.к. 02FFH = 1011111111B, то 10111111 - 11(000000) - первая часть в D, вторая в E, нули в скобках - автозабивка младших незначащих разрядов). Если это предположение верно, то получается, что переход произошел после того, как H == D, т.е. старшие байты стали равны. Теперь идет сравнение младших по тому же алгоритму.

Последние строчки

JNZ Start
MVI M,00H
HLT

опять радуют JNZ, работающим непонятно как (как и тот, что выше), командой MVI, которая опять непонятно откуда понимает, что теперь нужно забить нулями. Ну хоть команда HLT ясна.

Анончик, я смотрю ты шаришь. Можешь подробнее рассказать про регистровые пары? Откуда я черпаю инфу, про них мимолетом сказано и все.

Ответы234458234465

129 25 июля, 01:36 129 1234458

>>1234453
>По идее, тут нужно было как-то задействовать флаг нулевого значения, иначе команда JNZ исполняется всегда
Бля. Посмотрел что это за команда. Именно это она и делает. Если равно нулю, то исполняется код дальше, если нет - то переход на метку. Перепутал с JMP, списав на разные написания команд для разных процессоров.

14 Кб, 627x295
sage 130 25 июля, 02:00 130 1234465

>>1234453
>>1234440
> Псевдокод..?
Декомпилируй в уме. Пикрелейтед (не текстом, потому что макаба убивает выравнивание).

> Т.е. MVI M,00H записывает во второй байт HL нули
Берет из HL значение, использует это значение, как 16-битный адрес байта в памяти. Кладет туда ноль. Т.е. MOV (HL), BYTE 0.

> Как тогда определяется, что операнд команды MVI идет именно в HL?
Потому что M - признак адресации через HL. Вообще, везде непрямая адресация через HL, кроме стека.

> Теперь идет сравнение младших по тому же алгоритму.
Что-то типа того, да.

> Анончик, я смотрю ты шаришь. Можешь подробнее рассказать про регистровые пары? Откуда я черпаю инфу, про них мимолетом сказано и все.
[soiler]Почти не работал с 8085, так что меня нужно слушать с осторожностью.[/spoiler] А что подробнее? Некоторые инструкции работают с парами регистров, несмотря на то, что указан только старший регистр (или вообще не указан). Вот, например, те, у которых мнемоники с X. Пары BC, DE, HL заранее определены (сделать BD нельзя, например) и ведут себя в этом случае как одно 16-битное значение.

Ответы234466234470

sage 131 25 июля, 02:02 131 1234466

>>1234465
Бля, ну как обычно. Копипаста просочилась, там IF L != E во втором случае. Ну а Z для JNZ ставит SUB, если что.

Ответы234470

132 25 июля, 02:54 132 1234470

>>1234465
>Декомпилируй в уме
Ну примерно это я и попробовал сделать.

>Вообще, везде непрямая адресация через HL
Непрямая - т.е. без указания адреса? Адреса нет - значит имелся в виду HL.

>16-битный адрес байта в памяти
Разве MVI - не однобитная команда? Или конкретно тут пох, т.к здесь она используется только до заполнения до 10111111 (первой половиной двоичного 02FF)?

Любая команда вида MVI M,Х - будет задавать число Х в HL? А если надо задать число, не в HL и большее чем 8-бит, то LXI и прямую адресацию на нужную пару?

И как быть, если операнд вмещается в 8 бит? Можно ли отдельно использовать скажем D и E, притом так, чтоб любая операция не влияла на другой регистр скажем, если что-то прибавляется к D, и результат получается больше чем 8 бит - чтоб влияния на регистр E оно не имело, а было переполнение или что-то в этом духе?
Пока что я так понимаю, что они просто как бы склеены между собой, но находятся в памяти отдельно.

Зависит ли время обработки такого спаренного регистра в зависимости от заполненности? Или процессор всегда прогоняет все 16 бит?

И да, разве не нужно обнулять все эти регистры процессора после включения? Там же может что угодно быть. Не зря же на дискретных триггерах есть специальные выводы сброса в 0. Или оно там обнуляется аппаратно?

Адреса памяти, указанные в этой программе, относятся, я так понимаю, к внешней ОЗУ? А вот программа сия по обнулению адресов забивается в ПЗУ, верно?

>8085
Ну, эти команды от 8080, но разницы вроде как нет. Как дойду до чего-то такого, что можно в железе воплотить пусть и в целях мигания светодиодом - скорее всего буду брать процессор 1821ВМ85, который есть суть копия 8085. Но там можно поехать с настройкой ПЗУ, ОЗУ, ввода-вывода, отображением и прошивкой всего этого хлама, который давно пора сдать и купить ардуину парка микросхем.

>>1234466
>Ну а Z для JNZ ставит SUB, если что

Ну это я понял. Думал, что JMP и JNZ - одно и то же. SUB вычитает, JNZ проверяет флаг нуля.

132 25 июля, 02:54 132 1234470

>>1234465
>Декомпилируй в уме
Ну примерно это я и попробовал сделать.

>Вообще, везде непрямая адресация через HL
Непрямая - т.е. без указания адреса? Адреса нет - значит имелся в виду HL.

>16-битный адрес байта в памяти
Разве MVI - не однобитная команда? Или конкретно тут пох, т.к здесь она используется только до заполнения до 10111111 (первой половиной двоичного 02FF)?

Любая команда вида MVI M,Х - будет задавать число Х в HL? А если надо задать число, не в HL и большее чем 8-бит, то LXI и прямую адресацию на нужную пару?

И как быть, если операнд вмещается в 8 бит? Можно ли отдельно использовать скажем D и E, притом так, чтоб любая операция не влияла на другой регистр скажем, если что-то прибавляется к D, и результат получается больше чем 8 бит - чтоб влияния на регистр E оно не имело, а было переполнение или что-то в этом духе?
Пока что я так понимаю, что они просто как бы склеены между собой, но находятся в памяти отдельно.

Зависит ли время обработки такого спаренного регистра в зависимости от заполненности? Или процессор всегда прогоняет все 16 бит?

И да, разве не нужно обнулять все эти регистры процессора после включения? Там же может что угодно быть. Не зря же на дискретных триггерах есть специальные выводы сброса в 0. Или оно там обнуляется аппаратно?

Адреса памяти, указанные в этой программе, относятся, я так понимаю, к внешней ОЗУ? А вот программа сия по обнулению адресов забивается в ПЗУ, верно?

>8085
Ну, эти команды от 8080, но разницы вроде как нет. Как дойду до чего-то такого, что можно в железе воплотить пусть и в целях мигания светодиодом - скорее всего буду брать процессор 1821ВМ85, который есть суть копия 8085. Но там можно поехать с настройкой ПЗУ, ОЗУ, ввода-вывода, отображением и прошивкой всего этого хлама, который давно пора сдать и купить ардуину парка микросхем.

>>1234466
>Ну а Z для JNZ ставит SUB, если что

Ну это я понял. Думал, что JMP и JNZ - одно и то же. SUB вычитает, JNZ проверяет флаг нуля.

Показать весь текст
Ответы234476

sage 133 25 июля, 03:24 133 1234476

>>1234470
> Разве MVI - не однобитная команда?
Чо? Биты будешь через ANA/ORA/XRA ебать, также их -I версиями и всякими шифтами. А MVI кладет константу, байт в память.

> Любая команда вида MVI M,Х - будет задавать число Х в HL?
Не в HL, а в память по адресу, содержащемуся в HL.

> А если надо задать число, не в HL и большее чем 8-бит, то
Кладешь адрес в HL, делаешь MVI, а если больше 8 бит, то инкрементишь HL и снова делаешь MVI.

> Можно ли отдельно использовать скажем D и E
Конечно можно.

> Или процессор всегда прогоняет все 16 бит?
С чего бы вдруг? С 16-битными парами рабатают специально обученные инструкции.

> И да, разве не нужно обнулять все эти регистры процессора после включения?
Очевидно, что перед тем как читать из регистра (или он неявно как-то используется), туда нужно что-то записать. Если не нужно читать, то не похуй ли тебе, что там лежит?

> Адреса памяти, указанные в этой программе, относятся, я так понимаю, к внешней ОЗУ? А вот программа сия по обнулению адресов забивается в ПЗУ, верно?
Там же вроде общее адресное пространство. Традиционно процессор дрыгает ногами о том, что хочет читать/писать, а уж кто там будет это делать - не его проблемы.

> хлама, который давно пора сдать и купить ардуину
Я бы купил ардуину. Ебаться с древним говном весело, но абсолютно бесполезно. Взял бы 8051 что ли, он хоть используется еще иногда.

Ответы234715

134 25 июля, 04:21 134 1234488

Привет! Недавно начал учить fasm. Пока пишу только досовские 16-битки формата com. Хочу научиться в будущем пилить красивые демки. Расскажите мне про другие ассемблерные языки, чем fasm лучше и чем хуже остальных?

Ответы234494

135 25 июля, 04:24 135 1234490

Как несколько программ одновременно могут использовать одни и те же регистры? И как вообще могут работать несколько программ одновременно?
Не понимаю, как работает ОС, она умудряется и сама использовать регистры, и остальным прогам дает возможность их использовать. Как не возникает конфликта?

Ответы234494234544

sage 136 25 июля, 04:52 136 1234494

>>1234488
> чем fasm лучше и чем хуже остальных?
Минусы фасма - проблемы с отладочными символами (поддержки стандартных форматов нет и/или она делается внешними утилитами и неполноценная) и то, что он сам написан на x86-асме, и из-за этого запускается только на x86. Если для тебя это не минусы, тогда все ок. Все остальное в фасме - плюсы.

> Хочу научиться в будущем пилить красивые демки
Раз умеешь в 16-битный код - можешь уже начинать. Mode 13h, прямой доступ к видеопамяти, вот это все.

>>1234490
> Как несколько программ одновременно могут использовать одни и те же регистры?
Вытесняющая многозадачность же. В один момент времени работает только какой-то один поток. Ядро ОС вешается на прерывание таймера. Когда оно срабатывает, процессор при передаче управления обработчику прерывания сохраняет некоторые регистры (на x86 в стек, на ARM в SPSR). Код обработчика прерывания в ОС сохраняет остальные регистры до того, как начинает использовать их для своих нужд. После этого регистры копируются в структуру, хранящую состояние (контекст) потока. Потом выбирается по какому-нибудь алгоритму другой поток, готовый к исполнению (т.е., не ожидающий какого-то события - например, завершения чтения данных с диска). Переключаются таблицы страниц на таблицы страниц выбранного потока, сбрасываются всякие кэши, происходит много другой магии, и, наконец, из контекста этого потока читаются его регистры, происходит возврат из прерывания, и вот уже этот поток как ни в чем не бывало выполняет свой код с того места, где его прервали в прошлый раз.

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

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

Ответы234535245768

137 25 июля, 08:58 137 1234535

>>1234494
То есть, с какой-то определенной частотой я правильно понимаю прерывание таймера?, система сохраняет в своем стеке или где-то там еще регистры процесса, который она выполняла, и переходит на другой процесс, а процессы в состоянии ожидания не трогаются до тех пор, пока не дожидаются выполнения события, так?

Ответы234895

138 25 июля, 09:42 138 1234544

>>1234490
виртуальная адресация

139 25 июля, 15:39 139 1234715

>>1234476

>Чо? Биты будешь через ANA/ORA/XRA ебать, также их -I версиями и всякими шифтами. А MVI кладет константу, байт в память.

Бл. Разумеется, я имел в виду однобайтовая, а не однобитовая.

>Не в HL, а в память по адресу, содержащемуся в HL.

А если нужно скопировать двухбайтовое значение из HL в другую пару? MOV - однобайтовая, а среди двухбайтовых команд аналогичной что-то я не вижу - либо обмен, либо пересылка в стековый регистр.

>> А если надо задать число, не в HL и большее чем 8-бит, то
>Кладешь адрес в HL, делаешь MVI, а если больше 8 бит, то инкрементишь HL и снова делаешь MVI.

LXI H, 0001H
MVI M, 25D
INX H
MVI M, 26D

Получится 11001(000)-11010(000)? И какие будут адреса памяти использоваться, 0001Н и 0002Н? Но это в HL же ведь. Как это чудо потом переслать в другую пару?

>Очевидно, что перед тем как читать из регистра (или он неявно как-то используется), туда нужно что-то записать. Если не нужно читать, то не похуй ли тебе, что там лежит?

Так-то похуй, но по-хорошему, нужно делать это или нет?

>Там же вроде общее адресное пространство. Традиционно процессор дрыгает ногами о том, что хочет читать/писать, а уж кто там будет это делать - не его проблемы.

Ясно. Там уже мелочи - скорее всего, в пространство, отведенное ПЗУ, процессор писать ничего не может.

>Ебаться с древним говном весело, но абсолютно бесполезно

Ну, ископаемые микропроцессорные комплекты обладают двумя достоинствами. Во-первых, по ним много информации, в т.ч. и на русском языке. Во-вторых, сделать на них что-то работающее проще, чем на современных МПК ну тут спорно, т.к. все зависит от того, что необходимо. Йоба-игоры с таким-то графоном, разумеется, не про 8080 серию. Интересно было бы глянуть, на чем делаются современные лабораторные приборы, наверняка там управление идет через какой-нибудь МК или процессор.

139 25 июля, 15:39 139 1234715

>>1234476

>Чо? Биты будешь через ANA/ORA/XRA ебать, также их -I версиями и всякими шифтами. А MVI кладет константу, байт в память.

Бл. Разумеется, я имел в виду однобайтовая, а не однобитовая.

>Не в HL, а в память по адресу, содержащемуся в HL.

А если нужно скопировать двухбайтовое значение из HL в другую пару? MOV - однобайтовая, а среди двухбайтовых команд аналогичной что-то я не вижу - либо обмен, либо пересылка в стековый регистр.

>> А если надо задать число, не в HL и большее чем 8-бит, то
>Кладешь адрес в HL, делаешь MVI, а если больше 8 бит, то инкрементишь HL и снова делаешь MVI.

LXI H, 0001H
MVI M, 25D
INX H
MVI M, 26D

Получится 11001(000)-11010(000)? И какие будут адреса памяти использоваться, 0001Н и 0002Н? Но это в HL же ведь. Как это чудо потом переслать в другую пару?

>Очевидно, что перед тем как читать из регистра (или он неявно как-то используется), туда нужно что-то записать. Если не нужно читать, то не похуй ли тебе, что там лежит?

Так-то похуй, но по-хорошему, нужно делать это или нет?

>Там же вроде общее адресное пространство. Традиционно процессор дрыгает ногами о том, что хочет читать/писать, а уж кто там будет это делать - не его проблемы.

Ясно. Там уже мелочи - скорее всего, в пространство, отведенное ПЗУ, процессор писать ничего не может.

>Ебаться с древним говном весело, но абсолютно бесполезно

Ну, ископаемые микропроцессорные комплекты обладают двумя достоинствами. Во-первых, по ним много информации, в т.ч. и на русском языке. Во-вторых, сделать на них что-то работающее проще, чем на современных МПК ну тут спорно, т.к. все зависит от того, что необходимо. Йоба-игоры с таким-то графоном, разумеется, не про 8080 серию. Интересно было бы глянуть, на чем делаются современные лабораторные приборы, наверняка там управление идет через какой-нибудь МК или процессор.

Показать весь текст
Ответы234895

sage 140 25 июля, 20:21 140 1234895

>>1234535
Именно так.

>>1234715
> А если нужно скопировать двухбайтовое значение из HL в другую пару?
> команд аналогичной что-то я не вижу
Ну кроме обмена и PUSH/POP ты можешь просто сделать:
MOV B,H
MOV C,L

> Получится 11001(000)-11010(000)?
Что за нули в скобках? Да, по адресам 1 и 2 в памяти будут значения 25 и 26. Мы, видимо, не поняли друг друга. Зачем в другую пару? Или ты имел в виду, как 16-битное значение в регистровую пару положить?
> А если надо задать число, не в HL и большее чем 8-бит, то
Ну так LXI B,1234H и LXI D,ABCDH.

> но по-хорошему, нужно делать это или нет?
А мне-то откуда знать?

> процессор писать ничего не может.
Будет или какой-нибудь фолт (есть в 8080 bus error?), или запись проигнорируется.

Ответы234977

141 25 июля, 22:29 141 1234977

>>1234895
>Что за нули в скобках?

Имелось в виду да, как поместить число в пару.
Нули - незначащие старшие разряды. Вернее, кстати, должно быть 00011001-00011010.
Получается, что в таком случае в паре HL байт H будет по адресу 1, а байт L - по адресу 2?

Ответы234995

sage 142 25 июля, 22:45 142 1234995

>>1234977
> Получается, что в таком случае в паре HL байт H будет по адресу 1, а байт L - по адресу 2?
Чо? Мы про это ведь?
> LXI H, 0001H
> MVI M, 25D
> INX H
> MVI M, 26D
MEM[HL] = 25
MEM[HL + 1] = 26
Где ты здесь видишь БАЙТЫ H и L?

Ответы235063

143 25 июля, 23:31 143 1235063

>>1234995

Память же у него восьмибитная? Если так, то регистровая пара должна записываться в два адреса, как они задаются? Командами

LXI H, 0001H
MVI M, 1337D

вписывается в пару, но по каким адресам будут расположены байты H и L?

>> LXI H, 0001H
>> MVI M, 25D
>> INX H
>> MVI M, 26D

Здесь надо записать в H одно число, а в L - другое. Правда я хуйню написал, т.к. работать оно похоже не будет. Как это сделать? И опять же, вопрос про конкретные адреса в этом случае в силе.
думаю на этом пока что прекращу, дальше хоть чуть сам попробую разобраться

Ответы235096

sage 144 26 июля, 00:38 144 1235096

>>1235063
> MVI M, 1337D
Тебе скажут, что immediate is out of range. MVI пишет восьмибитное значение, 1 (один) байт по адресу, составленному из значений HL (т.е., по H 256 + L). 1337 в один байт не влезает.

> по каким адресам будут расположены байты H и L?
Ни по каким, они указывают назначение, а не источник.
MVI M,123D -> MVI (HL), 123D -> MEM[HL] = 123D -> MEM[H 256 + L] = 123D

> Если так, то регистровая пара должна записываться в два адреса
Здесь не пишется регистровая пара. Если бы мы говорили о какой-нибудь SHLD addr, которая пишет по указанному константному адресу содержимое HL (store HL direct), то сначала (по addr+0) пишется L, потом (по addr+1) пишется H.

> Здесь надо записать в H одно число, а в L - другое.
Здесь ты пишешь в память. Мы уже целые сутки об этом говорим. LXI грузит в H и L указанную 16-битную константу (если взять LXI H, ABCDH, то оно делает H = AB, L = CD). MVI пишет 8-битную константу в память по адресу, который берет из HL.

> И опять же, вопрос про конкретные адреса в этом случае в силе.
Какие адреса? Чего именно?

Ответы235097235111

sage 145 26 июля, 00:39 145 1235097

>>1235096
> H 256 + L
H × 256 + L сраная макака

146 26 июля, 01:12 146 1235111

>>1235096
>сначала (по addr+0) пишется L, потом (по addr+1) пишется H

Собственно вопрос про адреса заключался в этом.
Но не наоборот ли? HL же, по идее должна H быть перед L.

>> по каким адресам будут расположены байты H и L?
>Ни по каким, они указывают назначение, а не источник.

А это со времен писания программ на С. Задал переменную - и не имеешь-в-виду мозги, свои и чужие. Тут же регистр просто определяет, из какой ячейки памяти взять данные и куда их отправить ведь так?

>MVI M,123D -> MVI (HL), 123D -> MEM[HL] = 123D -> MEM[H 256 + L] = 123D

Команда -> полная запись -> память по адресу HL принимает значение 123D -> ???. Записанное в ячейке H × 256 + L число = 123D?
Но откуда такая запись - H × 256 + L?

Ответы235121

sage 147 26 июля, 01:46 147 1235121

>>1235111
> Но не наоборот ли?
Не наоборот. Там little-endian.

> Записанное в ячейке H × 256 + L число = 123D?
MVI пишет 123 в эту ячейку.

> Но откуда такая запись - H × 256 + L?
Ну так мы уже выяснили, что два 8-битных регистра H и L соединяются в один 16-битный. Естественно, в процессоре ничего не умножается физически, там гейты, но значение HL можно получить сдвигом H влево на 8 бит и заполнением младших 8 бит битами L. Можно записать как H << 8 | L. Можно заменить сдвиг умножением на 256 (256 = 28), а так как после умножения или сдвига в младших битах по определению нули, то | можно заменить сложением.

Ответы235135

148 26 июля, 03:09 148 1235135

>>1235121
>Ну так мы уже выяснили, что два 8-битных регистра H и L соединяются в один 16-битный. Естественно, в процессоре ничего не умножается физически, там гейты, но значение HL можно получить сдвигом H влево на 8 бит и заполнением младших 8 бит битами L. Можно записать как H << 8 | L. Можно заменить сдвиг умножением на 256 (256 = 28), а так как после умножения или сдвига в младших битах по определению нули, то | можно заменить сложением.

Я так понимаю, такая запись должна иллюстрировать взаимосвязь H и L, процесс их слияния? Тогда почему регистр H сдвигается влево (т.е. на один адрес памяти в минус), когда

>сначала (по addr+0) пишется L, потом (по addr+1) пишется H.

Ответы235819

149 26 июля, 12:27 149 1235289

Переправили в этот тред. Есть ли вообще смысл копаться в этом >>1235233 , изучая асемблер, или это всё пустая трата времени?

Ответы235300235819

150 26 июля, 12:38 150 1235300

>>1235289
Это только от тебя зависит, от твоего желания и стремления.

sage 151 26 июля, 21:48 151 1235819

>>1235135
>Тогда почему регистр H сдвигается влево (т.е. на один адрес памяти в минус), когда
Какие адреса вообще? Влево - это не в памяти. Мы говорим о битах. Влево - это в битах. Биты нумеруются справа налево, от менее значимых младших к более значимым старшим. И поэтому биты H (hi) попадают в старшие 8 бит 16-битного значения, а биты L (lo) - в младшие. Ты бы что ли какого-нибудь Петцольда почитал.

>>1235289
> кажется она на правленном движке первого старкрафта
Будет не очень приятно, c DirectDraw-то.

В общем и целом, если ты C/C++ знаешь, то можешь попытаться поковырять, только не дизассемблерный листинг, конечно, а в HexRays. Получится или нет - зависит от архитектуры приложения. Например, оно может физически не уметь рисовать больше N юнитов на экране, и с маленьким разрешением до лимита не доходить, а с большим - превышать его в разы. И чтобы подобные проблемы фиксить, может понадобиться очень много всего перепилить. А просто выставить разрешение повыше у экранных поверхностей и запустить без вылетов - это самая меньшая из проблем.

scriptalert(0)/script 152 27 июля, 09:55 152 1236017

Изучаю код на https://metanit.com/assembler/articles/MiniOS.php

Возник вопрос, зачем перед вызовом процедуры?
>SetCursorPos:
> mov ah,2h
> xor bh,bh
> int 10h
> ret
Перемещается в dx нуль?
>mov dx,0h
>call SetCursorPos

Ответы236466

153 27 июля, 10:19 153 1236027

Я не понял, процедуры - это метки что ли простые в ret в конце?

Ответы236028236032

154 27 июля, 10:20 154 1236028

>>1236027
*с ret в конце

155 27 июля, 10:25 155 1236032

>>1236027
>процедуры - это метки что ли простые в ret в конце?

Типа того, только с соглашением о вызовах, если они библиотечные. А инструкция call всего лишь адрес возврата в стеке сохраняет, а ret его востанавливает в счетчик адреса команд.

Ответы236041

156 27 июля, 11:00 156 1236041

>>1236032
А функции все параметры в стек пихают?

Ответы236459

157 27 июля, 15:39 157 1236270

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

.386p
.model flat, stdcall

extrn GetModuleHandleA@4:proc

includelib kernel32.lib

.data
imagebase dd 00400000h

.code
start:
int 3
mov edx, [imagebase]
mov eax, [edx + 3Ch]
add eax, edx
mov ebx, [eax + 80h]
add ebx, edx
end start

Если оставить extrn GetModuleHandleA@4:proc, программа падает при запуске с ошибкой 0xC0000045. Если закомментить - запускается, но падает, поскольку таблица импорта не создается. Откуда ошибка 0xC0000045?

Ответы236466

158 27 июля, 19:36 158 1236459

>>1236041
Как хочешь. Для высокоуровневых языков есть соглашения о вызове, а на асме ты можешь хоть все регистры параметрами засрать.

Ответы236463

159 27 июля, 19:42 159 1236463

>>1236459
А вы знаете почему не добавили например в Си работу с регистрами?

Ответы236466

11 Кб, 613x275
sage 160 27 июля, 19:45 160 1236466

>>1236017
> Возник вопрос, зачем перед вызовом
> процедуры? Перемещается в dx нуль?
Потому что пикрелейтед.

>>1236270
Может быть, дело не в импорте, а в том, что у тебя программа после add ebx,eax идет выполнять мусор?

>>1236463
Мы знаем. Потому что суть компилятора в оптимизациях, а оптимизировать что-либо, когда код напрямую ебет регистры, почти невозможно. Даже без этого правильно выбрать регистры под переменные оптимизатору очень непросто. Алсо, в Си было ключевое слово register, которое тоже портило жизнь и практически во всех компиляторах есть инлайн-асм, из которого ты можешь работать с регистрами, если тебе это зачем-то понадобилось.

Ответы236469236496

161 27 июля, 19:51 161 1236469

>>1236466
>Потому что пикрелейтед.
Спасибо. Что за справочник?

Ответы236470

4 Кб, 496x62
sage 162 27 июля, 19:56 162 1236470

>>1236469
Очень древний хелп откуда-то. До меня дошло как "Assembly Language.ng" с досовым вьювером. Но на скринах открыто во вьювере Expert Guide for Windows. Могу выложить.

Ответы236474

163 27 июля, 20:09 163 1236474

>>1236470
Как будет время выложишь, если не сложно. Буду благодарен.

Ответы236509

164 27 июля, 20:53 164 1236496

>>1236466
>Алсо, в Си было ключевое слово register
Сейчас разве нет?

Ответы236509

sage 165 27 июля, 21:13 165 1236509

>>1236474
Все, что было (там еще Ralf Brown кривой и еще что-то): https://transfer.sh/JacKp/NG.zip
Вьювер: http://davep.org/norton-guides/

>>1236496
> Сейчас разве нет?
Сейчас ключевое слово есть, но все, что оно делает - это запрещает применять к переменной оператор &. Большинство компиляторов не учитывает register даже как хинт для оптимизаций.

Ответы236636241358

sage 166 28 июля, 08:03 166 1236636

>>1236509
>Все, что было (там еще Ralf Brown кривой и еще что-то): https://transfer.sh/JacKp/NG.zip
>Вьювер: http://davep.org/norton-guides/
Благодарствую.

167 1 авг, 14:32 167 1238915

>>1216107 (OP)
>https://beginners.re/ - "Reverse Engineering для начинающих"- бесплатная современная книга на русском языке. К прочтению вкатывающимся и прочим ньюфагам обязательна!
Вот начал я её читать. И нихуя она не для начинающих. Там так всё пиздецово завёрнуто и не объясняются элементарные основы. Что такое стек, регистр, куча всяких понятий, которые ньюфагу нихуя не понятны и понятны быть не могут.

Есть что-то, что реально для начинающих?

Ответы239212239364239675239890

168 1 авг, 21:15 168 1239212

>>1238915
Ну найди себе книжку про ассемблер для начала тогда. Или какого-нибудь Петцольда (Код, тайный язык информатики) почитай, например.

169 2 авг, 00:03 169 1239364

>>1238915
>Что такое стек, регистр
Ты даун даже в чтение не можешь
>Желательные знания перед началом чтения
>Очень желательно базовое знание ЯП 9 Си. Рекомендуемые материалы: 11.1.3 (стр. 987)
Берёшь и переходишь на эту страницу и читаешь все книги, что там перечислены. Для начала хотя бы оглавления осиль.

170 2 авг, 17:25 170 1239675

>>1238915
Jeff Duntemann
Assembly language step by step (я читал версию начала 90х)

171 3 авг, 00:25 171 1239890

>>1238915
>Что такое стек, регистр, куча всяких понятий, которые ньюфагу нихуя не понятны и понятны быть не могут

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

Ответы239942

sage 172 3 авг, 06:40 172 1239942

>>1239890
> Тебе, долбоебу, и не нужно знать что такие регистр и стэк
Ты мимо JS-треда промахнулся.

173 3 авг, 23:04 173 1240496

Кароче, нужен дизассемблер с возможностью изменять код на ассемблере.
Например у меня есть маленькая программка, и мне надо в ней изменить одну инструкцию на другую (Например с inc на dec), ебаться с кодами операций нету желания.

Ответы240587

174 3 авг, 23:53 174 1240538

>>1227021
Не понел, регистры cr можно менять только на нулевом кольце, или я чо-то путаю?

Ответы240587

sage 175 4 авг, 02:03 175 1240587

>>1240538
Ну. В нулевом кольце интринсики запрещены законом, или что?

>>1240496
> Кароче, нужен дизассемблер с возможностью изменять код на ассемблере.
Называется отладчик. OllyDbg возьми, например. Он умеет сохранять потом патченные файлы.

Ответы240603240713

176 4 авг, 06:05 176 1240603

>>1240587
А не чего по минималистичней нету? Не очень кайфого юзать отладчик для изменения одной команды

Ответы240620241193241761

sage 177 4 авг, 08:06 177 1240620

>>1240603
python+capstone+keystone, ida умеет код патчить, в нее же можно keystone завезти. Хуй знает, что тебе нужно и зачем.

178 4 авг, 12:57 178 1240713

>>1240587
>Ну. В нулевом кольце интринсики запрещены законом, или что?
Так получается это сисколл. Им можно поменять любой флаг в cr-ках?

Ответы240925

sage 179 4 авг, 20:30 179 1240925

>>1240713
Это интринсик. Выглядил как функция, квакает как функция, а компилируется в одну или несколько ассемблерных инструкций. Поэтому с одной стороны у тебя чистый сишный код без асм-вставок, а с другой стороны ты можешь получать доступ к низкоуровневым возможностям, которых в Си нет. Алсо, существуют интринсики, которые разворачиваются в тот набор инструкций, который поддерживается целевым процессором - в основном это SIMD и всякая байто- и бито-ебля, которая есть везде, но в Си напрямую не поддерживается.

Ответы240967

180 4 авг, 21:23 180 1240967

>>1240925
>>1240925
Не, я не про это, понятно что это функция, просто из юзеспейса нельзя напрямую менять регистр cr, только через нулевое кольцо, а это значит вызов сискола. Ну просто же нальзя взять и изменить просто cr регистр из 3ого кольца. Т.е. получается только через сискол, если в контексте венды.

Ответы240986

sage 181 4 авг, 21:48 181 1240986

>>1240967
> Ну просто же нальзя взять и изменить просто cr регистр из 3ого кольца.
Значит тебе прилетит исключение, вот и все. Никаких сисколов.

182 5 авг, 13:22 182 1241193

>>1240603
Да мы тебе на ебальник ссали, защекан. Пиздуй юзать то, что есть, не выебывайся.

183 5 авг, 16:59 183 1241358

>>1236509
>Сейчас ключевое слово есть, но все, что оно делает - это запрещает применять к переменной оператор &. Большинство компиляторов не учитывает register даже как хинт для оптимизаций.

И тут GCC на высоте если делать ассемблерные вставки:

https://gcc.gnu.org/onlinedocs/gcc/Explicit-Register-Variables.html

228 Кб, 1080x1073
184 6 авг, 02:16 184 1241761

>>1240603
Для битхака - HIEW и HT. Для средних и больших патчей - FASM с макросами от Grom PE (ищи сам на форуме фазма).

185 6 авг, 03:37 185 1241765

Какими дебаггерами пользуетесь? Есть какие-нибудь аналоги турбо дебаггера? Чтобы был такой же простой?

Ответы241767241848

sage 186 6 авг, 03:50 186 1241767

>>1241765
OllyDbg, x64dbg. Олька вполне простая.

Ответы241798247059

187 6 авг, 10:00 187 1241798

>>1241767
> OllyDbg
Спасибо, попробую, конечно, но с турбо дебаггером все равно, мне кажется, по незамысловатости не сравнится. Но это я говорю, увидев скриншоты, так что хуй знает.

188 6 авг, 12:21 188 1241848

>>1241765
Под виндами x64dbg и OllyDbg, под досом SoftICE, под макосью LLDB и GDB.

189 9 авг, 00:54 189 1243336

>>1216418
А куда отсылается @f?

Ответы243363

sage 190 9 авг, 05:23 190 1243363

>>1243336
Ну куда-то вниз, на следующую @@.

Ответы243373

191 9 авг, 06:28 191 1243373

>>1243363
Я имел ввиду, куда конкретно.

192 11 авг, 22:58 192 1245171

блять сейчас яйца почесал, потом руку понюхал т она так пахнет

Ответы245272245349

193 12 авг, 04:37 193 1245272

>>1245171
Держи вкурсе.

194 12 авг, 10:46 194 1245349

>>1245171
Как? Давай подробнее...

195 12 авг, 12:09 195 1245370

Почему ассемблер так непопулярен?((9(

Ответы245429

196 12 авг, 14:16 196 1245429

>>1245370
Сам подумай

197 12 авг, 18:10 197 1245614

Чуваки, поясните, нахуя вы ебетесь с асмом, вам это в кайф? Или есть такая работа, требующая знание асма и приносящая хороший доход? Короче, какие вы профиты с этого имеете?

Ответы245733245746

sage 198 12 авг, 21:12 198 1245733

>>1245614
> нахуя вы ебетесь с асмом
Помогает при отладке объяснить любую, даже самую удивительную магию, происходящую в коде. В том числе и в чужом коде. В том числе и без исходников.

> работа, требующая знание асма и приносящая хороший доход
Есть embedded (писать на асме не нужно, а вот понимать происходящее крайне желательно). Теоретически есть реверсинг, но с доходами там туго.

199 12 авг, 21:41 199 1245746

>>1245614
Дает понимание работы ОС и программ в целом. Я вообще линупс одмин, а изучаю реверс для фана, ибо интересно.

200 12 авг, 22:02 200 1245768

>>1234494
https://arm.flatassembler.net/

Ответы245771

sage 201 12 авг, 22:05 201 1245771

>>1245768
> запускается только на x86
fasmarm написан на x86-асме, а компилирует в ARM. И он уже не нужен после выхода fasmg. Ты не можешь взять малинку, текстовый редактор и писать на фасме. Тебе придется взять пеку и компилировать на нем на самом деле можно qemu, но это, тем не менее, весьма неудобно.

106 Кб, 630x420
202 12 авг, 22:15 202 1245779

Скачал учебник для нубов по ассемблеру и почувствовал себя тупым. Заодно возник вопрос, почему например человек который 10 лет прогает на ассемблере, сходу прочитает учебник и сразу поймет что там написано, а мне нужно одну главу перечитать раз 5 вдумчиво прежде чем я пойму что там написано( и то останется много вопросов). Т.е к чему я веду. Вот допустим вам что то непонятно, а потом спустя какое то время вы удивляетесь тому что вам не была понятна такая элементарная вещь. Элементарная в том плане что все логично, и кажется что если бы ты не знал этой абстрактной вещи, и учил ее, то ты бы понял ее сразу. Но на самом деле прежде чем эта вещь стала тебе казаться элементарной, ты долго не мог понять, и перечитывал много раз.
Есть ли способ сразу прийти к тому состоянию, что бы сходу впитывать в себя новые знания, ведь они потом все равно будут тебе казаться элементарными и логически последовательными. Надеюсь кто нибудь поймет что я имел в виду.

Ответы245784246004246020256151256159

203 12 авг, 22:22 203 1245784

>>1245779
чем больше технологий изучишь, тем будет проще понимать "сходу"

204 13 авг, 12:19 204 1246004

>>1245779
Ну у меня есть неортодоксальный взгляд на эту тему. Просто дело в том что 99.99% объяснений (особенно если брать те которые попадаются при беглом знакомстве с темой) беспросветная чушь, и автар их писавший - терминальный мудило. Но рано или поздно ты находишь нормальное объяснение и автор его писавший - няша, либо у него была минута озарения. И ты внезапно понимаешь то что так давно не мог понять.

205 13 авг, 13:27 205 1246020

>>1245779
Утро вечера мудренее.

206 13 авг, 18:29 206 1246184

77 Кб, 860x192167 Кб, 1020x430

Котаны, что за магия на пикрелейтедах? Программа для макоси, скомпилирована clang. В макоси, как и в линуксах, используется System V ABI. Первый параметр должен передаваться в rdi. Какого хрена он передается в rax, как это вообще возможно? С остальными функциями, которые разбирал, все как надо, только с этой затык.

Ответы246190246291

207 13 авг, 18:39 207 1246190

>>1246184
Без контекста непонятно, показывай исходник.
Скорее всего там просто ожидаемый результат из-за оптимизации.

Ответы246263

208 13 авг, 20:55 208 1246263

>>1246190
Исходника нет, ковыряю чужую программу. На предмет излечения от жадности. На оптимизацию как-то совсем не похоже, на naked функцию тоже - внутри функции вызывается operator new [], да и код, за исключением следования непонятному соглашению о вызове, выглядит как типичный выхлоп компилятора.

209 13 авг, 21:26 209 1246275

Ребят кто знает где найти продолжение статей Bitfry'я.
http://bitfry.narod.ru/ Тут только начало, и как я понял должно быть продолжение.

83 Кб, 666x376
sage 210 13 авг, 21:43 210 1246291

>>1246184
Это как-то связано с пикрелейтедом, но чтобы разобраться точнее, нужно смотреть остальной код.

Ответы246302246496

211 13 авг, 22:01 211 1246302

>>1246291
Ты охуенен, анон. Очень похоже, что это оно и есть. Буду разбираться дальше.

212 14 авг, 11:45 212 1246496

>>1246291
Что за книга?

Ответы246786

213 14 авг, 15:32 213 1246613

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

sage 214 14 авг, 21:30 214 1246786

>>1246496
Спека же. Название картинки посмотри.

Ответы247064

215 14 авг, 22:32 215 1246813

Я нашел дыру в матрице. Создатель кто бы ты не был, фикси прошивку, а то я начинаю подозревать что то.
10110111100b = 1468d ( согласно калькуляторам). Если посчитать вручную на листике, то :
10110111100 = 110^10+ 010^9+ 1*10^8 etc ПОЛУЧАЕТСЯ
10110111100b = 10110111100d ?????????????????????????
Боты вы здесь? Агенты Смиты?
Идем дальше.
10110111100b = 5BCh
5BCh = 1468d
1468d = 10110111100b
10110111100b ≠ 1468d
Что это за хуйня аноныагенты Смиты?

Ответы246890247066

216 15 авг, 02:14 216 1246890

>>1246813
блин жаль тут нельзя удалять свои сообщения. стыдно пзд

Ответы246891

sage 217 15 авг, 02:15 217 1246891

>>1246890
Не переживай, мы все равно нихуя не поняли.

218 15 авг, 14:12 218 1247059

>>1241767
>Олька вполне простая
она жи не может в x64

Ответы247397

219 15 авг, 14:16 219 1247064

>>1246786
Да, действительно.

220 15 авг, 14:17 220 1247066

>>1246813
Это ты конечно сильно обосрался.

221 15 авг, 18:17 221 1247264

>>1216107 (OP)
странно, в шапке не нашел.
первая ссылка на архив пока что еще доступна на веархиве. задублируйте что ли

>>Все имеющиеся у меня материалы Криса (более 450 статей и книг) собраны в одном архиве:
>>www.insidepro.com/download/KK.zip
>>Для работы необходимо распаковать архив и запустить файл Index.html.
>>Несмотря на то, что все статьи были написаны достаточно давно, каждый сможет там найти что-нибудь интересное для себя и это будет хорошей памятью о человеке, который в свое время был настоящим хакером (в истинном смысле этого слова - пытливым, эрудированным, многогранным и с феноменальной работоспособностью).
>>-----------------------------
>>И сразу небольшой дисклеймер:
>>1. Все эти материалы накоплены лично мной за несколько лет и ниоткуда не скопированы.
>>2. Статьи Крис присылал сам (или давал доступ к своему фтп-серверу) и было его полное согласие на публикацию на сайте всех этих материалов.
>>3. Многие статьи были в рабочем или неоконченном состоянии, поэтому могут содержать ошибки, неточности или несоответствия по сравнению с журнальными вариантами.
>>4. Все эти материалы ранее выкладывались на сайте в разделе "Библиотека" (с 2010 по 2014 год):
>>http://web.archive.org/web/20140227133549/http://www.insidepro.com/rus/doc.shtml
>>5. На старом форуме WASM.ru Крис неоднократно сам упоминал сайт InsidePro и давал ссылку на него как на самый большой архив с его публикациями (и может оказаться так, что сейчас это действительно самый полный архив с его статьями на русском языке).
>>-----
>>EnJoy!

Ответы247462

sage 222 15 авг, 21:20 222 1247397

>>1247059
Не может. Поэтому там упомянут x64dbg, интерфейс которого на 3/4 спизжен с ольки (правда, криво).

223 15 авг, 22:36 223 1247462

>>1247264
хотя оплазил по рутрекеру, вот есть сборник чисто только статей. https://rutracker.org/forum/viewtopic.php?t=5375505

224 16 авг, 15:03 224 1247735

Как дёшево "взять" положительное число?

c = cc > 0 ? cc : -cc;

Сейчас сделано так, но остаётся установленным carry-flag.
Добавлять clc в каждую asm-функцию не хочется, какие варианты?

Ответы247737247739247971

225 16 авг, 15:11 225 1247737

>>1247735
Сделал так
c = cc > 0 ? cc : (~cc)+1;

Ответы247739

226 16 авг, 15:14 226 1247739

>>1247735
>>1247737
Не помогло, лол.

Ответы247741

227 16 авг, 15:17 227 1247741

>>1247739
Собственно, вопрос. Почему? После инвертации битов carry не стоит. Если потом к "с" прибавить 1, то carry всё ещё не стоит, там небольшое число.
Но вся конструкция целиком устанавливает carry. Какого хуя?

Ответы247745

228 16 авг, 15:22 228 1247745

>>1247741
c = cc > 0 ? cc : (~cc)+1;
CF raised

if(cc > 0) {
c = cc;
} else {
c = ~cc;
c++;
}

CF not raised

sage 229 16 авг, 21:38 229 1247971

>>1247735
Какой нахуй CF в сишном коде? Ты там под конкретную версию компилятора пишешь? А если в следующей оптимизатор изменится? А если у тебя флаги изменятся? А если в твоем коде что-то изменится, даже не относящееся к твоей функции, но косвенно влияющее на оптимизатор?

Ответы248152

230 17 авг, 12:22 230 1248152

>>1247971
Ну, не под конкретную версию, но пока что у меня вполне конкретный определённый gcc.
Пишу на asm/c, clc у меян в функциях не было, так как на сишке у меня нет математики, она на асме, вот я и не ожидал такой подставы.

Какое решение в итоге? Иметь clc в начале каждой математической функции, которая может зависеть от CF, так как полагаться на то, что флаг не установлен - просто нельзя?

Ответы248359

sage 231 17 авг, 21:41 231 1248359

>>1248152
> Иметь clc в начале каждой математической функции, которая может зависеть от CF
Я бы даже в асме за такое по голове стучал. Даже как true/false для bool func() CF часто неудобен, а уж как аргумент его использовать - это вообще пиздец. Если у твоей функции есть параметр carry (хотя я сходу не смог придумать функции, где такое понадобилось бы) - передавай его в регистрах или в стеке. Нахуя тебе clc, я вообще не понял. Пример приведи. Если у тебя, допустим, длинное сложение, ты начинаешь с add, продолжаешь adc - никаким местом от изначального CF оно не зависит.

232 19 авг, 16:57 232 1249206

Где реально располагаются каталоги таблиц страниц и сами таблицы страниц?
Сколько они реально занимают места?
Применяется ли к памяти, занимаемой ими, страничное преобразование?
Ядро самой ОС работает в страничной памяти?

Ответы249211249377

233 19 авг, 17:03 233 1249208

>>1226909
Абстракции, абстракции, абстракции. Без них невозможно удобно и быстро решить множество прикладных задач. Тебе так или иначе придётся создать какой-то инструмент, который позволяет инкапсулировать реальные процессы, протекающие в полупроводниковых элементах в
А, блядь, я даже не понимаю сам, о чём я говорю. Я знаю, что без абстракций нельзя, но почему внятно объяснить не могу.

234 19 авг, 17:11 234 1249211

>>1249206
А вообще, где почитать про то, как на аппаратном уровне реализуются все эти механизмы поддержки защищённого режима и многозадачности? И вообще про теорию производства микроконтроллеров и микропроцессоров, с диаграммами и принципиальными электронными схемами их устройства.

Ну и ВООБЩЕ ВООБЩЕ, откуда все эти интеловские микроэлектронщики получают свои скиллы? Есть же какая-то дисциплина, какие-то учебные пособия по теме, в которых говорится "Вот смотри, вот сюда транзистор, сюда транзистор и сюда ячейку памяти, вот у нас будет таймер. А вот так, вот так и вот так, это у нас элемент "И". А вот так, так, так, и так и вот у нас тридцатидвухразрядный мультипликатор действительных чисел, со встроенной возможностью поразрядной проверки делимости результата на степени пяти"?

Ответы249377256153

235 19 авг, 18:34 235 1249262

Ананасы-реверсеры, вы для своих изысканий пробовали использовать виртуальные машины типа Bochs? Чтобы исполнение проходило в полностью контролируемой среде, и моожно было вручную писать правила исполнения?

Ответы249383256112

236 19 авг, 19:40 236 1249311

Подскажите аналог HIEW для Linux?

Ответы249361

237 19 авг, 21:14 237 1249361

>>1249311
Нашел! HTE назвается

238 19 авг, 21:31 238 1249377

>>1249206
> Где реально располагаются каталоги таблиц страниц и сами таблицы страниц?
В оперативной памяти (ну еще кэш TLB в проце).

> Сколько они реально занимают места?
Зависит от архитектуры, структуры таблицы страниц, размера дескриптора страницы, размера страницы и количества доступной памяти - чем больше у тебя страниц, тем больше места занимают таблицы.

> Применяется ли к памяти, занимаемой ими, страничное преобразование?
Если тебе нужно. Но в MMU кладется физический адрес, и в случае многоуровневых таблиц MMU тоже по физическим адресам ходит.

> Ядро самой ОС работает в страничной памяти?
Выключать преобразования долго, да и незачем, поэтому да.

>>1249211
> А вообще, где почитать про то, как на аппаратном уровне реализуются все эти механизмы поддержки защищённого режима и многозадачности?
Таненбаум "Современные ОС", мануал на интересующий процессор.

> И вообще про теорию производства микроконтроллеров и микропроцессоров
Паки в поисковиках по BitTorrent DHT: digital systems design, computer architecture. В них овердохуя книг, ну или отдельно Хеннесси/Паттерсоны, Харрисы всякие. Можешь вот индусов еще посмотреть, если акцент не смущает: что-нибудь подобное https://www.youtube.com/playlist?list=PL59E5B57A04EAE09C (и вообще плейлисты на этом канале, там есть и уровнем ниже - про электронику, и уровнем выше - про архитектуру).

Ответы249427

sage 239 19 авг, 21:36 239 1249383

>>1249262
> вы для своих изысканий пробовали использовать виртуальные машины типа Bochs
Если с правилами - тебе лучше что-нибудь для инструментирования взять - DynamoRIO, Intel PIN там, ну или даже просто Unicorn Engine (хотя у единорога апи максимально уебищный и не годится ни для чего серьезного).

сажа отвалилась

240 19 авг, 22:47 240 1249427

>>1249377
Вообще молодца, огромное спасибо.

48 Кб, 745x514
241 23 авг, 14:10 241 1251418

Насколько сильно язык Ассемблера и машинный язык абстрагированы от конкретных особенностей аппаратной реализации отдельных элементов процессора, например его конвейера?
К примеру, насколько сильно отличается создание программ для процессоров с суперскалярным конвейером от процессоров с, ну, обычным?

Ответы251443

sage 242 23 авг, 14:37 242 1251443

>>1251418

Намного. Ебать x86 ассемблер в 2кХХ имеет смысл только для реверсинга/нелегального патчинга бинарников и малвари. Для всего остального есть интринсики и другие языки.

Ответы251458

243 23 авг, 14:48 243 1251458

>>1251443
>Для всего остального есть интринсики
Мне не понравилось, неудобно.
Пишу на Си+ASM разную математику.

244 25 авг, 20:26 244 1252623

Пытаюсь исполнять машинный код при помощи апишного VirtualAlloc значит... Но почему-то оно выдает exception на то, что я пытаюсь лезть в защищенные области памяти. Как это объяснить?
Анон с соседнего треда пояснил, что оно натыкается на два nop'a и исполняет дальше, где уже и защищенные области памяти. Почему так происходит? Ведь выделено памяти лишь под sizeof(code);
https://ideone.com/ZtKovP

16 BIT VS. 32 BIT 245 28 авг, 01:08 245 1253879

Тред еще живой? Надеюсь на ответ. Короче, я заинтересовался ассемблером выбрал fasm и решилтначать его учить. Прошел курс на асмворлд.ру, теперь что-то да знаю. Классно, все понял, вроде как, но трудности возникли, когда я решил попробовать перейти с шестнадцатибитных программ на тридцатидвухбитные - я нихуя не понял. Если программы для дос пишутся с помощью прерываний список которых можно легко найти, то как это работает в PE - не понятно. Все примеры 32-битных программ для шиндовс выглядят примерно так:

include "huinya32.INC"
include "govno32.INC"
include "ssanina/vrotebal32.INC"

nevedomaya magiya, v, makrosah
pizdec ebal, eti, makrosi

В этих ебучих inc-файлах не разобрался, что к чему. Неужели нельзя написать простую 32-битную программку без упрощений ввиде макросов? Где прочитать доходчивое объяснение того, как эта залупа работает? Строится ли все это на основе, ввиде прерываний, или тут какой-нибудь windows api и работает это не так, как дос-программы?

Ответы253979

sage 246 28 авг, 10:58 246 1253979

>>1253879
Ну смотри. Макросы можно и не использовать. Но: тебе нужны константы, в винде их дохуя, ты заебешься смотреть численные значения для каждой, тебе нужны структуры, в винде их дохуя, и ты заебешься вычислять офсеты. Конкретно без proc и invoke жить можно без проблем.

> Где прочитать доходчивое объяснение того, как эта залупа работает?
В документации.

> Строится ли все это на основе, ввиде прерываний
Прерывание всего одно - int 2e, хотя вместо него сейчас используется sysenter на процессорах, которые это умеют (читай: везде). Но номера сервисов для этого прерывания меняются от винды к винде, от билда к билду, поэтому напрямую системными вызовами пользуются только некоторые протекторы (у них там таблички), а для людей это все обернуто в API-функции. Вот эти функции, а также кучи других, более высокоуровневых, ты и вызываешь. Весь твой invoke сводится к push-push-push аргументов и call dword[SomeAPI]. Через некоторое время почитаешь про то, как работают DLL. Больше в программировании под винду для начинающих ничего сложного нет, да и вообще, писать под DOS гораздо сложнее.

Если что-то не понимаешь, приходи с конкретными вопросами про конкретную nevedomaya magiya-нейм.

Ответы254063

247 28 авг, 14:13 247 1254063

>>1253979
Большое спасибо. А SomeAPI, как я понял, находится в dll файлах?

Ответы254065

sage 248 28 авг, 14:15 248 1254065

>>1254063
Сами API-функции - в .dll, а конкретно тот дворд, который ты в call суешь (SomeAPI dd ?) - у тебя в таблице импорта. При загрузке твоей программы лоадер PE с помощью магии и извращений кладет туда адрес функции.

Ответы254067

249 28 авг, 14:20 249 1254067

>>1254065
То есть это 32-битное значение - это адрес, по которому в конкретном длл-файле находится функция, так?

Ответы254078254079

250 28 авг, 14:33 250 1254078

>>1254067

Это адрес, по которому загрузчик эту функцию поместил при загрузке dll и пометил для операционной системы, что такие-то функции (имя функции аски-текстом) он скопировал туда-то в оперативу (DWORD адрес на 32 бит, QUADWORD адрес на 64).

Вызывая функцию GetProcAddress и передавая в неё указатель на с-строку с именем функции (буквами) ты в ответ получаешь указатель на неё или 0 если такой функции нет. Либо то же самое делается под капотом если у тебя статическая линковка через вспомогательную lib - в таком случае этот код компилятор написал за тебя и вызовется он автоматом.

Ответы254090

251 28 авг, 14:34 251 1254079

>>1254067

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

Ответы254266

252 28 авг, 14:53 252 1254090

>>1254078
> ты в ответ получаешь указатель на неё
Адрес относительно какого-то сегмента, или прямой адрес, указывающий на какую-то точку памяти?
> или 0 если такой функции нет
А что, если функция находится по этому адресу? Или такое невозможно?
Много вопросов, прошу прощения.

Ответы254095254164

253 28 авг, 15:02 253 1254095

>>1254090
>А что, если функция находится по этому адресу? Или такое невозможно?

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

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

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

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

Ответы254110254115254164

254 28 авг, 15:32 254 1254110

>>1254095
Охуеть ты классный

255 28 авг, 15:45 255 1254115

>>1254095
>Трансляция адресов производится процом через таблицы страниц

самофикс.

sage 256 28 авг, 16:42 256 1254164

>>1254095
> но для юзермода считай что сегментов нет
Напомню про fs/gs. Напомню, что в cs и ds разные селекторы.

> получишь сегфолт
С линуксами путаешь, в винде нет сегфолтов, есть STATUS_ACCESS_VIOLATION.

> переход на 0 вызывает исключение ошибки выполнения
Это не особенность архитектуры. В большинстве архитектур нормально начинать выполнение с 0. В x86 это тоже возможно. Ошибка исполнения возникает потому, что по 0 ничего не выделено.

>>1254090
> А что, если функция находится по этому адресу?
Первые 64к адресного пространства у юзермодных приложений недоступны, даже если ты специально захочешь там что-либо выделить (в предыдущих версиях винды иногда можно было, в линуксе с админскими правами и сейчас можно: https://ideone.com/ps88Rb). В основном это сделано для того, чтобы отлавливать доступ по нулевым указателям, в том числе и в массивы (array[n], когда array == NULL). Если ты таки сумел выделить что-то в первых 64к, зарегистрировать это в лоадере как длл и заставить GetProcAddress вернуть NULL для существующей функции - ты сам себе злобный буратино.

Ответы254297254651

257 28 авг, 18:39 257 1254266

>>1254079
А в каком смысле перемещаемыми? Можно изменить расположение кода в оперативной памяти? Или имеется ввиду, что их можно перемещать из каталога в каталог? Тогда чем COM, например, не перемещаемый?

Ответы254534254621

258 28 авг, 19:30 258 1254297

>>1254164
Я где-то слышал что в 0 специально ничего не выдяляют, для типа NULL , если разыменовать указатель, то возникает как раз исключение, но то уже в контексте Си.
>cs и ds разные селекторы.
Т.е. Выделяются два сегмента для кода и данных? а стек? Поему не сделали плоскую чтобы cs=ds=ss=fs=gs ?

Ответы254475254651

sage 259 29 авг, 00:33 259 1254475

>>1254297
> Я где-то слышал что в 0 специально ничего не выдяляют
Ну я об этом и написал. На Си и крестах по-прежнему написано овердохуя кода (если не приложения, то библиотеки), поэтому отсутствие памяти по 0 - часть дизайна любой ОС, которая такой код выполняет.

> Выделяются два сегмента для кода и данных?
Да.

> Поему не сделали плоскую чтобы cs=ds=ss
Фактически она плоская (т.е., базы-лимиты совпадают). Селектор cs != селектору ds по всяким связанным с x86 причинам: например, в сегмент кода нельзя писать, по этому поводу для когда приходится делать отдельный дескриптор.

> fs/gs
Используется для быстрого доступа к TEB/PEB (например, для thread-local переменных или для обработки исключений), сегментный регистр позволяет каждому потоку быстро находить свои данные без системных вызовов или каких-то хитровыебанных вычислений адреса. В дескрипторах сегментов лежит ненулевая база.

Ответы254529254651

260 29 авг, 07:05 260 1254529

>>1254475
Получается что сегментые регистры не меняются, ос меняет только cr3 при переключении контекста?

Ответы254621254651

261 29 авг, 07:44 261 1254534

>>1254266
>Можно изменить расположение кода в оперативной памяти?

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

Ответы254561254569

262 29 авг, 09:45 262 1254561

>>1254534
На вики написано, что все смещения, вроде как, записаны относительно предпочитаемого базового адреса, а загрузчик эти значения пересчитывает, если нужно записать программу в другую точку в памяти. Зачем это? Не проще вместо линейного адреса записать относительный адрес, чтобы не приходилось ничего пересчитывать. Я, скорее всего, чего-то не понимаю, но звучит это как какой-то маразм.

Ответы254566254569

263 29 авг, 10:02 263 1254566

>>1254561
>Не проще вместо линейного адреса записать относительный адрес, чтобы не приходилось ничего пересчитывать.

Относительные адреса ограничены, емнип, 32 битами и только для JMP, у MOV вариантов с относительной адресацией нет, а счетчик команд читать нельзя. Поэтому и изменяемые базовые адреса и абсолютные смещения от них.

Ответы254569

264 29 авг, 10:13 264 1254569

>>1254566
> Относительные адреса ограничены, емнип, 32 битами и только для JMP

Да, и именно этот механизм используется в ДЛЛ.

> у MOV вариантов с относительной адресацией нет, а счетчик команд читать нельзя. Поэтому и изменяемые базовые адреса и абсолютные смещения от них.

Есть хак:

JMP nextline
nextline:
pop ebx

>>1254561

То что описал >>1254534 анончик называется load-time relocation и это действительно стандартный встроенный механизм загрузки исполняемых файлов - exe и elf по своей структуре заточены именно под него.

То что ты описал называется position-independent code
и этот подход сейчас тоже активно применяется и компиляторы в него умеют.

вот статья:
pop ebx

Ответы254570254621

265 29 авг, 10:13 265 1254570

>>1254569
https://habr.com/company/badoo/blog/323904/

sage 266 29 авг, 12:20 266 1254621

>>1254569
> То что ты описал называется position-independent code
> и этот подход сейчас тоже активно применяется и компиляторы в него умеют.
Только ты забыл сказать, что оно жрет регистр, которых в 32-битном коде и так мало (в 64-битном коде уже есть нормальная и rip-relative адресация, и регистров там достаточно), плюс PIC чаще всего требует лишнего дереференса, поэтому медленнее, плюс требует лишних данных. В общем, это классическая проблема: либо мы патчим код при загрузке и тратим память на copy-on-write, либо мы тормозим в рантайме. Память сейчас дешевле мегагерцев, вывод очевиден.

>>1254266
> Тогда чем COM, например, не перемещаемый?
Пропустил. COM максимально перемещаемый по своей сути, но лишь потому, что целиком влезает в сегмент, и ты можешь выбрать ему любой сегмент. А вот в MZ EXE уже несколько сегментов, и нужны поправки для ссылок на эти сегменты. В PE EXE сегменты кончились, поэтому пришлось сделать поправки для вообще всех ссылок на данные.

>>1254529
> Получается что сегментые регистры не меняются
Ну как бы да, основные дескрипторы стандартные, спокойно лежат себе в GDT одни на всех.

267 29 авг, 13:37 267 1254651

>>1254164
>>1254297
>>1254475
>>1254529
Что вы с этим всем делаете и как используете?
Какая деятельность привела к тому, что изучили это?

Я вот пишу на x86 64-онли и вообще не понимаю, что у вас присходит, какой-то другой мир.

Раньше писал под мипсы, тоже вашей магией там не пахло.

Ответы254663

sage 268 29 авг, 13:56 268 1254663

>>1254651
Сегменты - это тяжкое наследие x86. В других архитектурах оно если и есть, то в рудиментарном состоянии (например, в виде MPU, когда MMU нет). В x86-64 у тебя сегменты все равно под капотом остались, базы-лимиты игнорируются, а fs/gs вполне используются софтом. Смотри (cc -c -std=c11 -O0 file.c && objdump -d file.o):
int main(void) {
static _Thread_local int foo = 1;
return foo;
}

> Какая деятельность привела к тому, что изучили это?
Наличие трех- четырех-пятитомника от интела (подарили в бумаге, правда достаточно старые), ковыряние малвари, попытки в собственные ОС.

Ответы254680254683

269 29 авг, 14:09 269 1254680

>>1254663
Кем работаешь если не секрет?

270 29 авг, 14:21 270 1254683

>>1254663

Есть годные доки/гайдлайны чтобы вкатиться в дровописание под прыщи? Там как иоктлы писать, как файловый доступ? Хочу вкатиться в pcie-махарайки на FPGA (блокчейн, машинлеарнинг вотэтовот всё).

271 31 авг, 17:14 271 1256104

Положим, я с нуля наваял свою собственную ОС. Что мне потребуется для того, что начать писать прикладные программы для неё к примеру на C++?

Ответы256118256178

272 31 авг, 17:23 272 1256112

>>1249262
OsDev советует Bochs для работ, связанных с разработкой операционных систем.

273 31 авг, 17:34 273 1256118

>>1256104
Как минимум компоновщик. Возможно к этому тебе нужно будет написать и ассемблер, не уверен. Препроцессор и компилятор берешь готовый. Поправьте меня, если я ошибся, самому интересно.

Ответы256178

274 31 авг, 18:24 274 1256151

>>1245779
Бывает такое, это нормально, когда встречаешься с какой-нибудь новой концепцией. Лучше не читать один учебник пять раз, а посмотреть пять учебников, хоть где-нибудь да объяснено нормально.

Ответы256698

275 31 авг, 18:26 275 1256153

>>1249211

276 31 авг, 18:40 276 1256159

>>1245779
Ты сейчас на этапе накопления первичных знаний. Спустя некоторое время копания в теме, понятия и термины выстроятся в твоей голове в более-менее упорядоченную схему, и станет намного легче. Главное не бросать, а стараться рассмотреть предмет интереса с разных сторон.

Ответы256698

sage 277 31 авг, 19:09 277 1256178

>>1256104
Линкер, как предлагает >>1256118, либо лоадер ELF или PE вместо него. Лучше второе - быстрее, проще, удобнее из-за наличия готовых инструментов. И еще понадобится реализация сишной и/или крестовой стандартной библиотеки (точнее, стоит взять готовую и добавить поддержку твоих системных вызовов или апи).

96 Кб, 908x444
278 31 авг, 21:21 278 1256270

Ответы257833

279 1 сен, 18:23 279 1256698

>>1256151
>>1256159
Спасибо за мотивацию. Сейчас на время забросил ассемблер (перегорел) и вернулся к пайтону.

280 3 сен, 13:15 280 1257833

>>1256270
Проиграл с большой мощностью.

281 3 сен, 19:04 281 1258142

Если BIOS во время своей инициализации опрашивает все устройства на матплате, получается, и самого запуска она не знает, сколько, к примеру, PCIe-портов на неё напаяно, так? Стало быть, теоретически, можно каким-то раком припаять к матплате ещё один PCIe-порт и BIOS его обнаружит?
Чексумму BIOS, само собой, подправить.

Ответы258280260125

sage 282 3 сен, 20:56 282 1258280

>>1258142
> опрашивает все устройства на матплате
Это зависит от того, что ты понимаешь под словом "все". Некоторые устройства можно обнаружить динамически, для некоторых можно постучаться в какой-то well-known IO-порт и узнать, есть ли там что-то, для каких-то устройств нужно заранее знать, есть ли оно. Читай спеку PCIe. Если шина позволяет так делать, то проблем или не будет, или будут минимальные.

283 6 сен, 15:02 283 1260125

>>1258142
>теоретически, можно каким-то раком припаять к матплате ещё один PCIe-порт и BIOS его обнаружит
Если чипсет(?) (квадратный чип на плате) поддерживает ещё один, то да.

284 10 сен, 00:18 284 1261659

Как известно, одна из фич защищённого режима x86-64 это разделение памяти процесса на две части - сегмент текста и сегмент данных. Сегмент текста нельзя изменять и писать в него новые данные, а сегмент данных нельзя использовать для исполнения. Таким образом, в защищённом режиме невозможна динамическая рекомпиляция программ.
Однако, в сегменте текста мы можем написать интерпретатор, который будет читать сегмент данных байт за байтом. А в сегменте данных мы можем разместить своеобразный код, который будет указывать интерпретатору, что ему следует делать.
Я правильно понимаю, что именно так и работают виртуальные машины?

Ответы261674

sage 285 10 сен, 01:08 285 1261674

>>1261659
> Я правильно понимаю, что именно так и работают виртуальные машины?
Какие-то так, как ты описал: гигантский свитч в сегменте кода и команды с данными в сегменте данных. Другие виртуальные машины JIT-ом компилируют свой байткод в машинный код. Третьи, которые которые эмулируют тот же x86 на x86 (например, VirtualBox или DOSBox), небольшими кусочками инструментируют машинный код, т.е., исправляют всякие переходы, работу с памятью и прочие "опасные" инструкции таким образом, чтобы код работал с виртуальным окружением. Т.е., вот выполняют вот эту самую динамическую рекомпиляцию:

> Таким образом, в защищённом режиме невозможна динамическая рекомпиляция программ.
Из того, что в сегмент кода нельзя писать, никак не следует, что ты в принципе не можешь записать в память машинный код. Фактически в современных ОС у сегмента кода (чей селектор лежит в cs) и сегмента данных (селектор в ds и прочих) база и лимит полностью совпадают. Процессор при чтении кода использует cs, инструкции, которые работают с памятью, по умолчанию используют ds/es (иногда ss), никаких проблем. Поэтому ты, конечно же, не можешь сделать mov dword[cs:addr],1 но никто не запретит тебе сделать mov dword[ds:addr],0xccfeeb90 и jmp addr. И даже если у тебя кастомная ОС, которая почему-то решила использовать похороненную интелом сегментацию, этой ОС все равно нужно как-то загружать программы в память, поэтому у нее будет (возможно временный) дескриптор сегмента, перекрывающийся с сегментом кода программы, и ОС скорее всего предоставит тебе API для его использования.

Если ты говоришь не о сегментации в x86(-64), а о сегментах программы (того же ELF) и куче (т.е., нельзя писать в .text, можно в .data), там защита использует атрибуты страниц (а не сегментов), и опять же никто тебе не мешает выделить страницу для данных (rw), написать туда, а потом пометить ее как код (rx). Чаще всего ты даже можешь сразу выделить страницу кода, в которую можно писать (rwx), но ОС и антивирусы такое не любят. Еще можно замапить одну и ту же страницу физической памяти с разными атрибутами.

Алсо, x86 сам решает за тебя большинство вопросов с кэшами, а вот на каком-нибудь ARM при записи исполняемого кода о сбросе кэша нужно помнить, иначе есть шанс спецэффектов.

sage 285 10 сен, 01:08 285 1261674

>>1261659
> Я правильно понимаю, что именно так и работают виртуальные машины?
Какие-то так, как ты описал: гигантский свитч в сегменте кода и команды с данными в сегменте данных. Другие виртуальные машины JIT-ом компилируют свой байткод в машинный код. Третьи, которые которые эмулируют тот же x86 на x86 (например, VirtualBox или DOSBox), небольшими кусочками инструментируют машинный код, т.е., исправляют всякие переходы, работу с памятью и прочие "опасные" инструкции таким образом, чтобы код работал с виртуальным окружением. Т.е., вот выполняют вот эту самую динамическую рекомпиляцию:

> Таким образом, в защищённом режиме невозможна динамическая рекомпиляция программ.
Из того, что в сегмент кода нельзя писать, никак не следует, что ты в принципе не можешь записать в память машинный код. Фактически в современных ОС у сегмента кода (чей селектор лежит в cs) и сегмента данных (селектор в ds и прочих) база и лимит полностью совпадают. Процессор при чтении кода использует cs, инструкции, которые работают с памятью, по умолчанию используют ds/es (иногда ss), никаких проблем. Поэтому ты, конечно же, не можешь сделать mov dword[cs:addr],1 но никто не запретит тебе сделать mov dword[ds:addr],0xccfeeb90 и jmp addr. И даже если у тебя кастомная ОС, которая почему-то решила использовать похороненную интелом сегментацию, этой ОС все равно нужно как-то загружать программы в память, поэтому у нее будет (возможно временный) дескриптор сегмента, перекрывающийся с сегментом кода программы, и ОС скорее всего предоставит тебе API для его использования.

Если ты говоришь не о сегментации в x86(-64), а о сегментах программы (того же ELF) и куче (т.е., нельзя писать в .text, можно в .data), там защита использует атрибуты страниц (а не сегментов), и опять же никто тебе не мешает выделить страницу для данных (rw), написать туда, а потом пометить ее как код (rx). Чаще всего ты даже можешь сразу выделить страницу кода, в которую можно писать (rwx), но ОС и антивирусы такое не любят. Еще можно замапить одну и ту же страницу физической памяти с разными атрибутами.

Алсо, x86 сам решает за тебя большинство вопросов с кэшами, а вот на каком-нибудь ARM при записи исполняемого кода о сбросе кэша нужно помнить, иначе есть шанс спецэффектов.

Показать весь текст
Ответы261702261850

286 10 сен, 02:04 286 1261702

>>1261674
Круто, пояснил как б-женька. Спасибо.

287 10 сен, 12:12 287 1261850

>>1261674
>есть шанс спецэффектов
Обожаю спецэффекты.

288 13 сен, 10:29 288 1263469

пишу свою виртуальную машину и тут передо мной встала проблема: как в бинарнике отличается значение от номера регистра? Я пытался поискать в гугле как это работает, но скорее всего плохо гуглил, так как ничего не получил.

Ответы263693263721

289 13 сен, 18:29 289 1263693

>>1263469
> как в бинарнике отличается значение от номера регистра
Положением, опкодом, признаком формы адресации. Виртуальную машину чего ты пишешь? Что-то свое? Если x86, тогда качай Intel SDM и читай том 2, глава 2 "Instruction Format".

290 13 сен, 19:13 290 1263721

>>1263469
Для каждого байта операции определяй положение регистра и данных строго. Я таг собираюсь делать.

291 15 сен, 10:20 291 1264509

bump

292 16 сен, 21:01 292 1265182

>>1216107 (OP)
Поясните за многопоточность.
Есть: одноядерный процессор, два потока

Вопрос:
Если процессор одноядерный то два потока ни в каком случае не могут исполняться одновременно? Будет просто даваться квант времени одному потоку, квант другому?

До вчерашнего дня я думал именно так, но,
с толку сбивает вот что:

В википедия аппаратная реализация многопоточности делится на 2 варианта:
а) Временная (то что я описал выше)
б) Одновременная

Simultaneous multithreading (SMT) is a technique for improving the overall efficiency of superscalar CPUs with hardware multithreading. SMT permits multiple independent threads of execution to better utilize the resources provided by modern processor architectures.

Проясните пожалуйста этот момент.

Ответы265320

# OP 293 17 сен, 01:18 293 1265320

>>1265182
Есть варианты, когда на одном физическом ядре дублируют пару исполнительных блоков и делают настройку, чтобы он прикидывался двумя ядрами, типа Hyper Treading. Но это чётко видно, процессор представляется ОС как двухядерный. Так что да, на одноядерном процессоре без HT или аналога два потока не смогут исполняться одновременно.

Ответы265323265480

294 17 сен, 01:34 294 1265323

>>1265320
>Но это чётко видно, процессор представляется ОС как двухядерный
Воот, вот этого не хватало. Спасибо большое

295 17 сен, 12:12 295 1265480

>>1265320
>типа Hyper Treading
Жаль, что прирост производительности это даёт редко (а в моём случае даже наоборот получается).

296 21 сен, 19:35 296 1267901

Знатоки асма, скажите, обращение к памяти (mov, jmp, ...) происходит за O(1), то есть не зависит от адреса?

Ответы267903267944

297 21 сен, 19:37 297 1267903

>>1267901
Я имею в виду время выполнения.

sage 298 21 сен, 21:02 298 1267944

>>1267901
Во-первых, большая O() - это метрика роста, а не скорости. Во-вторых, нет. Процессор читает из памяти блоками, блоки кэшируются, соответственно, следующий доступ к адресу, попавшему в кэшлайн, будет гораздо дешевле. Ниже уровнем там тоже не все равномерно - зависит и от типа памяти, и от загруженности шины.

Ответы267966

299 21 сен, 21:37 299 1267966

>>1267944
>O() - это метрика роста
Об этом и спрашиваю. По модулю кэширования и виртуализации время обращения зависит от адреса?
Кстати, можно напрямую контролировать кэширование и доступность страниц виртуальной памяти? Это, вообще, сделано прозрачно для программиста?

Ответы268035

300 21 сен, 23:46 300 1268035

>>1267966
> Кстати, можно напрямую контролировать кэширование
Да, можно отключать, задавать способ кэширования какого-то региона, можно чистить кэш итд.

301 23 сен, 19:46 301 1269079

Кто-нибудь fasmg уже использует? В какой он стадии готовности? Можно на нём полноценно собирать для x86-64?

Ответы269106

sage 302 23 сен, 20:08 302 1269106

>>1269079
> Кто-нибудь fasmg уже использует?
Я использую, но не вижу смысла им собирать x86-64 - он в разы медленнее, а все вкусные фичи уже бэкпортированы в fasm1. Вот кастомные ассемблеры и прочие генераторы бинарников я на нем уже пару лет пишу, мне норм.

Ответы269117

303 23 сен, 20:17 303 1269117

>>1269106
Но ведь будущее за fasmg. Я думал, может пора перебраться.

Ответы269126

22 Кб, 320x240
sage 304 23 сен, 20:29 304 1269126

>>1269117
> Но ведь будущее за fasmg
У фасма вообще нет будущего, пока он написан на себе самом. У нас ARM в разы больше, чем x86-64, а фасм ведь даже не x86-64, он 32-битный. Если его не перепишут на Си или под кастомную вм какую-нибудь, он рано или поздно умрет. Вариант с вм, кстати, предлагали еще во время обсуждения кроссплатформенных плагинов к IDE на фасмконе в середине 2000х, а воз и ныне там.

Ответы269167

305 23 сен, 21:48 305 1269167

>>1269126
Это конечно важные технические обстоятельства. Но, ведь, преимущество fasmg - это беспрецедентно мощные макросы макросы повсюду. В этом он превосходит всех, я понимаю.

Ответы269176

sage 306 23 сен, 22:09 306 1269176

>>1269167
> это беспрецедентно мощные макросы
...для понимания поведения которых нужно детально знать, как устроен фасм. И даже тогда обнаруживать, что что-то не работает или работает не так, как ожидалось. Если тебе нужны именно макросы, ты можешь взять python, keystone, и дальше твои fp.write(insn_bytes) не ограничены абсолютно ничем, в отличие от фасма, где ты просто физически не можешь делать всякие странные вещи типа struct с 50к элементами из-за особенностей самого фасма и того, что struct - это макрос.

> В этом он превосходит всех
Собственно, из уникальных вещей в фасме только многопроходная оптимизация по размер/разрешение имен и расширенные возможножности манипуляции с данными, особенно блок virtual. Остальное есть и/или реализуемо с привлечением внешнего препроцессора в других ассемблерах.

307 30 сен, 19:46 307 1272491

Каким хекс-редактором пользуетесь?

Ответы272542

308 30 сен, 19:47 308 1272492

А как программа в 16 битном режиме продолжает выполняться после cli? Я новичок я тупой я не понимаю

Ответы272542

sage 309 30 сен, 21:15 309 1272542

>>1272491
HxD, 010.

>>1272492
А почему бы ей не выполняться? cli говорит, что не нужно обрабатывать запросы на прерывания (кроме NMI), но выполнение не останавливает. Вот если ты сделаешь cli и потом hlt, тогда оно остановится, да.

310 2 окт, 11:45 310 1273238

Как исследовать Win32 DLL-ку?
Есть древняя библиотека (в папке msvcrt версии 5.00.7128 ну и дата разработки 1998 г), содержащая API (несколько десятков методов). Документации и инклюд/тлб-файлов и ничего такого нет, в интернете сведений почти нет. Все, что удалось вытянуть - это названия экспортируемых функций.
Есть программа, которая эту SDK использует.

1) Реально ли зареверсить библиотеку и получить инфу о прототипах функций, порядке вызова и т.д? Естественно, конечная цель - заюзать либу в своем коде.
2) Если да, то с чего начинать?

Ответы273438

sage 311 2 окт, 16:38 311 1273438

>>1273238
> Как исследовать Win32 DLL-ку?
Frida, чтобы логировать вызовы апи, можно методом внимательного просмотра лога восстановить прототипы, смысл параметров и т.д. IDA±HexRays, чтобы посмотреть (псевдо)код и восстановить утраченное знание. На посиделки в IDA придется потратить некоторое время, никакой магии она не делает.

> Реально ли
Более чем.

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

Ответы273572

312 2 окт, 21:08 312 1273572

>>1273438
>Можешь либу выложить тут, вряд ли там что-то секретное или коммерчески применимое от 98 года-то.
http://rgho.st/private/7sNLM7DbJ/1c00a4e4d5f38525e1234a5a2b8c5d2e
Эта либа-синтезатор речи.

Запускаем файл, он устанавливается (только под админом плюс на x64 бывают проблемы и надо руками в реестр прописывать, на x32 вроде работает даже на новых версиях винды до десятки включительно). Распаковывается в %WINDIR%\lhsp\.

LHSTTS60.exe - программа, которая использует библиотеку. Чтобы она заговорила, надо нажать file -> open, выбрать какой-нибудь txt-файл и потом нажать кнопку Play, либо в главном окне нажать About (прога проговаривает информацию из окна о программе).
В принципе она вроде бы даже работает без установки, если просто все извлечь.
Там много всякого (подключаемые модули с разными языками и голосами), но экспорт по ходу идет из TTSMGR60.DLL, а остальные файлы - это уже внутренние зависимости.

Ответы273714

313 2 окт, 22:54 313 1273640

Можно как-нибудь подключить отладочные символы фасма в x64dbg?

Ответы273714

sage 314 3 окт, 07:52 314 1273714

>>1273572
> Эта либа-синтезатор речи
Если цель - лишь заставить это говорить, то TrueVoice умеет работать через COM (MS Speech API), это строк двадцать на Си плюс обработка ошибок, при этом ты можешь использовать и другие синтезаторы, которые умеют в Speech API, не изменив ни строчки кода. Это тебя почему-то не устраивает? Не хочешь таскать с собой дистр Speech API? Какие-то дополнительные фичи нужны? В принципе, если хочешь, оставь какие-нибудь контакты (не телеграм) - я могу поучаствовать.

>>1273640
Вроде было fas2pdb (гуглится), и тут посмотри еще https://board.flatassembler.net/topic.php?t=9792

Ответы273982

315 3 окт, 16:35 315 1273982

>>1273714
https://board.flatassembler.net/topic.php?t=20753
Этот плагин у меня не работает (коллапсится весь дебаггер без предупреждения).

Ответы274024

sage 316 3 окт, 18:13 316 1274024

>>1273982
> Этот плагин у меня не работает
Лол, ну так отладь его.

1 Кб, 450x28
317 6 окт, 14:53 317 1275542

>>1216107 (OP)
Поясните, в чём ошибка. В s у меня находится слово, я беру страший байт этого слова и пытаюсь перенести его в 8-разрядный регистр AH. Байт же должен поместится в 8 разрядов, что ему не нравится?

Ответы275651

318 6 окт, 18:32 318 1275651

>>1275542
Что за синтаксис? Разве там не должно быть mov ah , ds:[s + 1] ? Если s - метка или препроцессорная переменная здесь читай адрес

Ответы275936

1 Кб, 462x26
319 7 окт, 14:24 319 1275936

>>1275651
>Что за синтаксис?
Turbo Assembler

>Разве там не должно быть mov ah , ds:[s + 1] ?
Попробывал, это ничего не меняет.

>Если s - метка или препроцессорная переменная здесь читай адрес
s - слово в сегменте данных (s dw 88ffh). То есть мне надо не ds:s+1 писать, а, например, ds:[6], я правильно понял?

Ответы275976

320 7 окт, 15:23 320 1275976

>>1275936
Попробуй mov ah , byte ptr ds:[s + 1]
В фасме это будет mov ah , byte ptr s + 1

Ответы275999

1 Кб, 499x39
321 7 окт, 15:55 321 1275999

>>1275976
Теперь вроде работает, но странное дело: дальше я пересылаю третий символ из строки symbols прошлым способом, но на это он ошибок не выдаёт. Как же так?

Ответы276011

322 7 окт, 16:08 322 1276011

>>1275999
Метка symbols как объявлена?
Если symbols db "..." , то и нарезать данные ассемблер будет побайтово.

Ответы276015

323 7 окт, 16:15 323 1276015

1 Кб, 130x851 Кб, 331x27

>>1276011
Да, db, тогда всё понятно. Но у меня есть ещё один глупый вопрос: я же заношу все эти hex-коды в память, почему отладчик мне сообщает, что там хранятся не мои коды, а какой-то мусор?

Ответы276063276081

324 7 окт, 17:14 324 1276063

>>1276015
Сразу так не скажешь.
По тем ли адресам ты дамп просматриваешь?
Может, твоя программа уже поменяла эту память.

Ответы276072

325 7 окт, 17:27 325 1276072

>>1276063
Ну, наверное по тем, если по листингу транстляции судить. Да и где мне их ещё искать, там же от 0000 до FFFF очень много всего. Не знаю, могла ли программа изменить эту память, я ведь её ещё даже не запускал.

Ответы276078

326 7 окт, 17:34 326 1276078

>>1276072
Как ты отлаживал, не запустив? Не понимаю.
Запускаешь отладку. Останавливаешь (брейкпоинтом?). Ищешь нужные адреса в дампе. Или ищешь в дампе по значению.

Ответы276091

327 7 окт, 17:38 327 1276081

>>1276015
Это .com файл, там в памяти PSP сначала, смотри по CS:100h, а не по CS:0.

Ответы276092

328 7 окт, 17:45 328 1276091

>>1276078
Открываю отладчик, вижу что в ds совсем не те цифры, которые я задавал, ну и ладно. Запускаю в пошаговом режиме. Terminated, exit code 0. В ds так ничего и не изменилось. Что я делаю не так?

Там же должно быть сразу, ещё перед запуском
ds:0000 9A 8B 7C 6D 5E 88 FF 40
ds:0008 23 24 00 00 00 00 00 00

Разве нет? Что он тогда пересылать-то будет?

Ответы276095276099

329 7 окт, 17:47 329 1276092

>>1276081
Да, действительно, спасибо. Но, честно говоря странно, у меня же не .com, а .exe.

330 7 окт, 17:50 330 1276095

>>1276091
> Но, честно говоря странно, у меня же не .com, а .exe
А, ну так ты смотришь по DS, судя по скриншоту. При старте DS = сегменту PSP. Смотри по CS.

Ответы276100

331 7 окт, 17:51 331 1276099

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

Ответы276100

332 7 окт, 17:52 332 1276100

>>1276095
>>1276099
Понятно, спасибо.

333 9 окт, 10:10 333 1276706

>>1216107 (OP)
Аноны, можете рассказать что делает регистр swr в x86 FPU? Ну или хотя бы ткнуть носом туда, где подробно написано про то, как работает стек FPU под капотом.

Ответы276992

334 9 окт, 20:40 334 1276992

>>1276706
Эээ, Simply FPU, первая глава, более чем подробно. Вроде как где-то даже был перевод на русский.

> как работает стек FPU под капотом
Там же классический стек. В status word в трех битах лежит индекс "текущего" физического регистра top (0...7), который является верхушкой стека (st0). Относительно него (по модулю 8) адресуются логические st0-st7 (т.е., st7 - это физический регистр с номером (top + 7) % 8 или, так как мы байтоебы, (top + 7) & 7). Изначально (и после finit) в top 0, стек растет вниз. Т.е., когда ты делаешь какой-нибудь push - например, fld1, сопроцессор декрементирует индекс (top = (top - 1) & 7), и затем пишет в свежий st0 данные: x87_regs[top] = 1.0. Когда ты делаешь pop - например, fstp [mem], сопроцессор читает данные из st0, т.е., x87_regs[top], а потом инкрементирует индекс (top = (top + 1) & 7).

Сильно не заморачивайся, это мертвая технология, сейчас все под SSE собирается, даже если особой выгоды от SIMD нет. Разве что чей-то старый код реверсить - тогда да, нужно.

335 11 окт, 16:59 335 1277753

Аноны, выручайте, скачал IDA 7.0 Freeware, но не могу запустить отладку через ней. Нету вкладки Debugger и кнопка запуска неактивна.

Ответы277852

336 11 окт, 21:02 336 1277852

>>1277753
> The freeware version of IDA v7.0 has the following limitations: > lacks support for many processors, file formats, debugging etc...

Ответы278053

337 12 окт, 13:08 337 1278053

>>1277852
Аноны, в IDA отредактировал инструкцию, но при запуске дебага ничего не меняется, что не так?

Ответы278132

338 12 окт, 15:49 338 1278132

>>1278053
Тебе должно было сказать:
> The database has been patched. There might be some inconsistency between the disassembly in the database and the actual debugger process.
Для отладки используется API винды, винда отлаживаемую программу из образа грузит, где патчей нет. Почему IDA не патчит память уже после загрузки образа - хуй знает, вон Олька патчи применяет из прошлых сессий, и ей вполне норм. Ну и поэтому все, что есть в меню Edit->Patch program предназначено в основном для Edit->Patch program->Apply patches to input file. Если применишь к образу, то безусловно работать будет.

Хотел тебе предложить самому наговнокодить полторы строки на питоне, но внезапно оказалось, что на момент получения dbg_process_start у idaapi.visit_patched_bytes висит только хуй, а про патчи оно на время отладки забывает. Но... в общем, вот тебе по-быстрому сделанный на коленке костыль: https://hastebin.com/kozazidoxe.py (положить в <IDA>\plugins и не забыть удалить, когда отпадет необходимость, потому что кривое говно). Можешь сам допилить детект типа процессора, чтобы оно не торчало в памяти для какого-нибудь Z80 и самое главное - обработку rebase. В текущем виде плагин работает только когда адрес образа в иде равен адресу образа в памяти при отладке, но при отладке длл, эта длл может быть перемещена, и тогда плагин пропатчит не свой образ. Там нужно ловить segm_moved в IDBHook и исправлять адреса патчей, которые в этот сегмент попадают, ничего сложного.

Ответы278138278145

sage 339 12 окт, 15:58 339 1278138

>>1278132
Ну и как обычно, не мог не наебаться: https://hastebin.com/yutitufela.py (удаляет патчи, когда исправляешь обратно на оригинал).

340 12 окт, 16:16 340 1278145

>>1278132
Спасибо анон, буду пробовать.

341 14 окт, 02:22 341 1278699

Нюфаг вкатился. Сука, как проходить эти ебаные CRACKME?. Захожу на crackmes . de , выбираю сложность 1 ( самое легкое ), ЯП C++, ASM. Окей, смотрю чо как там в x64dbg, ставлю бряки на какие-то апишки, короче нахожу как ручками все пройти. НО КАК БЛЯТЬ ПАТЧИТЬ-ТО/ПИСАТЬ КЕЙГЕН/ДДЛКУ?. Окей, там на том же сайте есть вкладка с решениями от других анонов, но эти ИНДУСЫ нихуя не объясняют, а пишут хуйню в духе: вот это magic_number меняем на другое magic_number, ставим бряк на HUI_ZNAET_CHTO_I_POCHEMY_NAME = ГАТОВА!!!! А ну и еще вот уже пропатченый файл тож тут лежит! А сука расписать как ты это сделал????. Дискасс.

Ответы278707279365

342 14 окт, 02:43 342 1278707

>>1278699
> НО КАК БЛЯТЬ ПАТЧИТЬ-ТО
Ну так если ты ручками пройти можешь, исправь нужные джампы или чтения флагов. Тыкаешь в x64dbg пробел, правишь код, тыкаешь View->Patch file, тыкаешь Patch, схороняешь, готово.

> ПИСАТЬ КЕЙГЕН
Разбираешь алгоритм, пишешь. Или выдираешь чек и брутфорсишь нахуй.

В чем вопрос-то? Не знаешь асма? Учи. Не понимаешь, что происходит? Тыкай ; на каждой строчке и комментируй, что (и главное зачем!) делает инструкция. Возможно, имеет смысл посмотреть флоу по сноуманом по F5, но если уж дело дошло до такого, возьми лучше IDA/HexRays, сноуман говно редкостное. Собирай свои крякми уровня if (!strcmp(key, "magic")) puts("Success"), смотри, что за код генерится и пробуй запатчить его.

Алсо, можешь сюда притащить что-нибудь, разберем с анонами.

Ответы278762

343 14 окт, 11:04 343 1278762

>>1278707
Асм не учил, знаю немного c/c++ и винапи. IDA/hexrays это платные тулзы на сколько я помню. x64dbg + HxD + exeinfope + cff explorer - такого набора не хватит?

Ответы278844278870278886

344 14 окт, 13:19 344 1278844

>>1278762
> IDA/hexrays это платные тулзы на сколько я помню
Среди бесплатных ты аналогов не найдешь даже близко. Но на первое время одного лишь x64dbg хватит.

345 14 окт, 13:55 345 1278870

>>1278762
Так купи треснутую Иду.

346 14 окт, 14:17 346 1278886

>>1278762
>тред нелегальной йобы под названием реверс-инжиниринг
>покупать софт не потому что это удобно и нужна поддержка, а потому что воровать не хорошо

Ответы278909

347 14 окт, 14:39 347 1278909

>>1278886
> тред нелегальной йобы под названием реверс-инжиниринг
В России можно реверсить софт, даже если лицензия запрещает, если тебе это нужно, чтобы с этим софтом работать. Нельзя результаты выкладывать.

Ответы278923278977

348 14 окт, 15:13 348 1278923

>>1278909
А что, не в России прямо смогут узнать, что ты реверсишь у себя дома в тёмном-тёмном УБЕЖИЩЕ ХАКЕРА в подвале?

Ответы278927

349 14 окт, 15:21 349 1278927

>>1278923
Есть вот такой известный подход. В светлых-светлых офисах, за зеленые-зеленые бумажки. https://en.wikipedia.org/wiki/Chinese_wall#Reverse_engineering

350 14 окт, 17:17 350 1278977

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

Ответы278983

351 14 окт, 17:41 351 1278983

>>1278977
Реверсят софт для того, чтобы понять/посмотреть как там чо работает и получить с этого профиты. Я же хочу вкатиться в реверс для анализа малвари да мамин этичный хакер итт. Сейчас половина софта фри, другая часть с бесконечными триалками и лишь специализированный софт хуй просто так получишь. Ту же ИДу например, VM workstation итд хотя кого я обманываю, все мы знаем где лежат кряки.

Ответы279002

111 Кб, 1280x720
352 14 окт, 17:54 352 1278990

Поясните за IDA Pro. Вот тот С-псевдокод, который генерируется hex-rays декомпилятором, его можно в исполняемый файл сконпелировать?

Ответы279032

353 14 окт, 18:06 353 1279002

>>1278983
>посмотреть как там чо работает и получить с этого профиты
Вот это как раз незаконно.

354 14 окт, 19:24 354 1279032

>>1278990
> его можно в исполняемый файл сконпелировать
Чтобы получить более-менее нормальный код, нужно долго и усердно расставлять типы. И все равно не факт, что оно будет работать - не весь код декомпилируется корректно (иногда это можно исправить, иногда проблемы в самом HexRays). Например, из-за ошибок типизации HexRays может выкинуть половину функции, причем как раз ту, что делала полезную работу. Так что результат декомпиляции все равно приходится перепроверять, доводить руками, плюс есть всякие __usercall/__spoils и JUMPOUT, которые компилятору не объяснишь. Ну и когда дело доходит до крестов, все становится сильно хуже.

355 15 окт, 12:28 355 1279365

>>1278699
О, нихуя себе, и такое есть

356 16 окт, 12:34 356 1279878

Правильно ли я понимаю, что поток является своеобразной атомарной единицей количества данных, которые могут быть выполнены без прерывания? Ну, если я правильно понял Таненбаума, процессы могут прерываться и могут создавать новые потоки. Но как только мы входим в поток, то все инструкции, которые мы в нём выполняем, мы должны выполнить от явной точки входа в поток до явной точки выхода из потока.

Ответы279960

357 16 окт, 15:32 357 1279960

>>1279878
Чо? Нет. Никаких единиц количества данных, откуда ты взял-то это вообще? Есть два вида многозадачности: кооперативная и вытесняющая. В кооперативной поток сам выбирает, когда ему поделиться процессором, он может не делиться вообще - тогда будет примерно так, как ты описываешь, но пользователи будут ругать автора программы плохими словами. В вытесняющей многозадачности есть какой-нибудь таймер, и процессор выполняет в потоке столько инструкций, сколько успеет между двумя тиками таймера, а после этого управление может быть отдано еще кому-нибудь (а может и не быть).

> процессы могут прерываться и могут создавать новые потоки
Процесс сам по себе кода не выполняет, его выполняют потоки. Процесс - это некая сущность, хранящая информацию об одном или нескольких потоках и их общей памяти (и о других общих для этих потоков ресурсах, например, о дескрипторах файлов).

118 Кб, 811x1147
Фарш невозможно провернуть назад 358 20 окт, 11:13 358 1281734

Поясните. Вот при конпеляции скажем гцц, код превращается в бинарник через промежуточные стадии, скажем ассемблер, машинный код. А можно ли сконпелировать код взад на какой-либо из стадий? Ну там, из машинного кода сделать обратно ассемблер или что-то в этом роде?

Ответы281738

359 20 окт, 11:55 359 1281738

>>1281734
Из машинного кода в ассемблер - дизассемблер. В язык высокого уровня - декомпилятор.

Ответы281764

360 20 окт, 12:55 360 1281764

>>1281738
> Из машинного кода в ассемблер - дизассемблер. В язык высокого уровня - декомпилятор.
Но это ж ущербные решения, в том смысле, что дизассемблированный код обратно в бинарник не сконпелируется. Про декомпиляторы чуть выше говорили, что тоже функции могут побиться. Или я что-то недопонимаю?

Ответы281802281807

361 20 окт, 14:24 361 1281802

>>1281764
> дизассемблированный код обратно в бинарник не сконпелируется
Скомпилируется, если ничего не упустить. Основная проблема - отличить офсеты от констант.

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

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

362 20 окт, 14:50 362 1281807

>>1281764
С дизассемблированным кодом проблем быть не должно.
Декомпиляторы да. В моей молодости их вообще не существовало нормальных.

Ответы281808

363 20 окт, 15:01 363 1281808

>>1281807
> С дизассемблированным кодом проблем быть не должно.
Т.е бинарник можно открыть в ida pro, потом по f10 вроде получить ассемблерный код, и потом его просто засунуть в компилятор, и скомпилированное будет работать?

Ответы281820281821

364 20 окт, 15:18 364 1281820

>>1281808
ida pro даже без хексрейса это не совсем голый декомпилятор. Посмотри в сторону дизассемблеров попроще, которые берут машинный код и 1-в-1 переводят.

Ответы281822281828282620

365 20 окт, 15:18 365 1281821

>>1281808
Сначала View->Problems как минимум, но и они не дают 100% гарантии.

366 20 окт, 15:19 366 1281822

>>1281820
>не совсем голый декомпилятор.
В смысле не совсем голый дизассемблер

367 20 окт, 15:46 367 1281828

>>1281820
> Посмотри в сторону дизассемблеров попроще, которые берут машинный код и 1-в-1 переводят.
Например?

Ответы281847

368 20 окт, 16:34 368 1281847

>>1281828
Не знаю, какие именно дизассемблеры имел в виду анон выше, но я знаю самый простой:
db 0b8h,00h,4ch,0cdh,21h
Такой дизасм точно скомпилируется!

Ответы281999

369 21 окт, 02:42 369 1281999

>>1281847
> db 0b8h,00h,4ch,0cdh,21h
> Такой дизасм точно скомпилируется!
Всякие хелловорлды из 3,5 байт понятно что скомпилируются. Речь всё-таки о более жизненных примерах, н-р нормальные среднестатистические бинарники.

Ответы282022

370 21 окт, 06:04 370 1282022

>>1281999
Это я пошутить пытался, но, видимо, безуспешно.

Еще раз, скомпилируется все, что угодно, если ассемблер поддерживает тот синтаксис, что генерирует дизасм (всякие assume, offset и ptr). А вот работать собранный код будет при соблюдении любого из условий:
1) Дизасм не исправлялся, и ассемблер не занимается самодеятельностью (вроде замены jmp near на jmp short, lea на mov и т. д.), и линкер не занимается самодеятельностью, переставляя или объединяя секции, т. е. в скомпилированном коде адреса инструкций и данных в коде никуда не уезжают относительно оригинала.
2) Вы вместе с дизасмом прошли по всем (абсолютно всем!) числам в коде и заменили все числа, которые являются адресами на метки (и/или арифметику с метками). Т. е., чтобы в случае, если эти адреса изменятся (см. пункт 1), ассемблер мог правильно их пересчитать. Как бы ни старалась IDA, она в этой задаче лажала и будет лажать, потому что такое не всегда возможно решить даже человеку. Например, нельзя ничего сказать про dd 0401000h, пока не найдешь код, который к нему обращается; не всегда можно понять, занимается ли lea edx,[eax+4000h] целочисленной арифметикой или вычислением адреса и т. д.

Так как первый вариант по сути бесполезен, а даже единственная ошибка определения адреса во втором варианте закладывает в исходник мину замедленного действия, проще всего выбрать третий вариант и патчить бинарники, не пересобирая их. Хотя я знаю как минимум три случая, когда большие исполняемые файлы (больше полуметра, а один еще и на крестах с MFC при этом) были дизассемблированы, пересобраны и даже вроде бы работали. Впрочем, не факт, что они работали всегда и правильно.

Ответы282126

371 21 окт, 12:54 371 1282126

>>1282022
>Например, нельзя ничего сказать про dd 0401000h
Как же процессор что-то говорит про dd 0401000h?

Ответы282304

372 21 окт, 16:31 372 1282304

>>1282126
Процессор знает только про текущую инструкцию и все. Еще он пытается декодировать несколько инструкций вперед, иногда у него это даже получается, но это отнюдь не означает, что то, что он декодировал - инструкции, и что они будут выполнены:
push 0
call _exit
inc ecx
inc edx
inc esp ; На самом деле три inc - это db 'BAD', и оно не выполнится.

Если к foo dd 0401000h будет обращаться инструкция типа call [foo], то это однозначно адрес (если, конечно, инструкция call - на самом деле инструкция, а не похожий набор байт). Если будет mov eax,[foo], это еще не гарантирует, что внутри не адрес. Дальше может быть jmp eax, а может и не быть. А может быть работа с этим двордом физически отсутствует в данном модуле, и что-то решить вообще невозможно. Пример:
; Функция из exe, вызывает точку входа плагина и передает ему параметром указатель на структуру с API-функциями приложения. Ну вот решил автор, что ему так удобнее, чем через экспорты в exe.
init_plugin:
mov ecx,plugin_entry ; Как-то получен через LoadLibrary.
push api_ptrs
call ecx ; plugin_entry
retn

; Возможно, указатели на какие-то функции. Допустим даже, что по этим адресам на самом деле есть функции.
api_ptrs:
dd 401000h ; А вот хуй, это версия приложения 64.16.00
dd 411103h ; А вот это и правда указатель на функцию.
db "FOO",0 ; А вот хуй, это ида слажала, там dd 004f4f46h и это указатель на функцию.

И вот поди и разбери. Это, конечно, крайне надуманный пример, но этот код в принципе не декомпилируется со 100% уверенностью. Ни человеком, ни машиной. Обычно решается сравнением разных версий приложения в надежде что то, что адреса - изменилось, а то, что константы - нет, но иногда другой версии просто нет.

Ответы282460

373 21 окт, 18:01 373 1282365

Сап двач. Есть сравнение числа с диапазоном других чисел. Само число в al. При числе меньше 48 выходит то, что независимо от условного перехода, будь это jbe или jle, переход происходит в любом случае. Т.е строки jbe digit_compare и jle output_asci переходят на соответствующие метки в любом случае. Причем я могу поменять местами jbe с jle и поток выполнения не изменится. Отладка дала мне только то что флаги меняются только при первом сравнении. Код ниже:

cmp al,57d
jbe digit_compare
jmp letter_compare

digit_compare:
cmp al,48d
jle output_asci
jmp letter_compare

Что делать с переходами?

374 21 окт, 18:50 374 1282387

У тебя с условиями напутано. Твой код говорит, что перейти на letter_compare нужно когда символ больше '9' или больше '0'. Очевидно, что это не то, что ты имел в виду. Ты скорее всего хотел:
cmp al,57
ja letter_compare
cmp al,48
jb letter_comare
что_то_делаем_с_цифрой:
...
jmp куда_то
letter_compare:
...
jmp куда_то

Ответы282643

375 21 окт, 21:36 375 1282460

>>1282304
0: 42 inc edx
1: 41 inc ecx
2: 44 inc esp

Ответы282464

376 21 окт, 21:51 376 1282464

>>1282460
Действительно, я хуево посчитал.

377 22 окт, 12:40 377 1282620

>>1281820
>Посмотри в сторону дизассемблеров попроще, которые берут машинный код и 1-в-1 переводят.
А конкретно? Что из этого https://en.wikibooks.org/wiki/X86_Disassembly/Disassemblers_and_Decompilers лучше?

Ответы282752

378 22 окт, 13:56 378 1282643

>>1282387
Да, я ошибся с переходами. В моем случае были нужны jae и jbe т.к. я проверяю код введенного символа на соответствие ascii коду цифры.

379 22 окт, 17:11 379 1282752

>>1282620
Озвучь задачу-то? Хочешь что-то старое попатчить или код рипнуть?

Ответы282759

380 22 окт, 17:17 380 1282759

>>1282752
Нужно что-то, с помощью чего можно с высокой степенью вероятности получить из бинарников компилирующийся во что-то работоспособное ассемблерный код.

Ответы282761

381 22 окт, 17:18 381 1282761

>>1282759
Бля, ты не решение, ты ЗАДАЧУ озвучь. Зачем тебе это?

382 22 окт, 20:02 382 1282895

Сап двач. Есть задача:
Написать программу на языке ассемблера, которая обрабатывает нажатия клавиш на клавиатуре и выдаёт на экран следующую информацию:

1) ASCII-код символа, если была нажата алфавитно-цифровая клавиша основной клавиатуры.
2) Строку «Расширенный код», если была нажата функциональ-ная клавиша, клавиши дополнительной клавиатуры или комбинации клавиш с «ALT» и «CTRL».
Программа должна предварительно чистить буфер клавиатуры. Информация о каждом нажатии должна выводиться в новой строке (предыдущие сведения не затираются). Символы должны вводиться без эха. Программа должна завершиться по нажатию клавиши «ESC».

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

Ответы282908283519283599

383 22 окт, 20:12 383 1282908

>>1282895
Ну ведь есть int 16h/ah=10h, она выдает тебе всю нужную информацию. Состояние Ctrl/Alt по int 16h/ah=12h.

Ответы283120

384 23 окт, 00:13 384 1283053

Посоветуйте, что/где почитать про параллелизм для x86-64 под Win? Именно хардкорный параллелизм, а не какое-нибудь concurrency или multithreading/multitasking. CAS, транзактные/атомарнае операции, ну и так далее.

Ответы283240283674

62 Кб, 369x525
385 23 окт, 04:39 385 1283119

>>1216107 (OP)
>Сайты по RE:
>нет срякэкзелаба

386 23 окт, 04:44 386 1283120

>>1282908
Можно прямо из 0000h:041Eh читать.

387 23 окт, 11:12 387 1283240

>>1283053
>Посоветуйте, что/где почитать про параллелизм для x86-64 под Win? Именно хардкорный параллелизм, а не какое-нибудь concurrency или multithreading/multitasking. CAS, транзактные/атомарнае операции, ну и так далее.

https://www.threadingbuildingblocks.org/

Ответы283674

388 23 окт, 19:21 388 1283519

>>1282895
Что за спецуха и ВУЗ, если не секрет?

389 23 окт, 19:31 389 1283526

>>1216107 (OP)
можно ли изменить директиву описания данных? тобиш
вот
a dw 0
можно ли сунуть чо-нить туда
mov a,[ax]

Ответы283535

390 23 окт, 19:40 390 1283535

>>1283526
Конечно.
например mov byte ptr [a+0], al

Ответы283548

391 23 окт, 19:57 391 1283548

>>1283535
спасибо!
а как расшифровать
mov al,a[bx][di]
к чему эти два регистра после константы

Ответы283566

392 23 окт, 20:29 392 1283566

>>1283548
все разобрался, a+bx+di получается

393 23 окт, 21:27 393 1283599

>>1282895
Прикладная информатика, ОГУ им. Тургенева.

394 24 окт, 04:35 394 1283674

>>1283053
>>1283240
Тут такие вопросы возникли. Как 'управлять' многопроцессорной/многоядерной системой в Win32? Вот, наприер, если есть участок кода X, и я хочу потребовать, чтобы этот участок выполнялся гарантированно на разных ядрах, либо вообще не выполнялся. Не важно на каких (пусть ОС решает), главное, чтоб на разных. Как этого добиться? Как сделать, чтобы X выполнялся одновременно тремя (ровно) ядрами? Как добиться каких-то гарантий одновременности? Чтобы не получить это как результат переключений в рамках вытесняющей многозадачности. Это может быть сделано прозачно, вообще? Или, например, когда ядро 1 выполняет участок X, может ли оно узнать, выполняется ли X каким-то другим ядром сейчас?

Ответы283683287456

395 24 окт, 05:41 395 1283683

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

> Как сделать, чтобы X выполнялся одновременно тремя (ровно) ядрами?
Напиши свою ОС/возьми ртос, и после долгой ебли со сбросом кэшей у тебя все равно не будет 100% гарантии.

> Это может быть сделано прозачно, вообще?
Нахуй никому не нужно. Максимум, что нужно для реальных практических задач - возможность узнать, сколько всего ядер (чтобы узнать, сколько потоков порождать) и возможность раскидать потоки по ядрам. Такое есть везде.

> Или, например, когда ядро 1 выполняет участок X, может ли оно узнать, выполняется ли X каким-то другим ядром сейчас?
Да, заведи себе атомарную переменную и инкрементируй ее при входе в блок кода, декрементируй при выходе. Банальные InterlockedIncrement/Decrement вполне подойдут.

Ну и главный вопрос: НАХУЯ?

Ответы283684

396 24 окт, 05:53 396 1283684

>>1283683
>SetThreadAffinityMask
Недостаточно гибко. Надо не на конкретных, а на разных, по модулю планировки планировщиком ОС.
>Да, заведи себе атомарную переменную и инкрементируй ее при входе в блок кода, декрементируй при выходе
А где гарантии одновременности.
>НАХУЯ?
ТАКНАДА Для полноценного параллелизма, полагаю.
>Нахуй никому не нужно.
Печально.

Ответы283686

397 24 окт, 06:00 397 1283686

>>1283684
> Для полноценного параллелизма, полагаю.
Ты точно с онанизмом не путаешь? - Эй, сосед, ты тоже сейчас на это дрочишь? - Да! Как здорово дрочить вместе!

Ответы283687

398 24 окт, 06:02 398 1283687

>>1283686
Каждый дрочит, как он хочет. Тебя не заставляют.

Ответы283688

399 24 окт, 06:09 399 1283688

>>1283687
Я просто не понимаю, почему ты считаешь, что вот если все дрочат одновременно на один пик - это полноценный параллелизм, а если кончают не на друг друга вместе - это уже неполноценный. Мне вот рассказывали, что нужно наоборот изобретать всякие lock-free алгоритмы, чтобы не отвлекаться на соседей.

Ответы283690

400 24 окт, 06:26 400 1283690

>>1283688
>Мне вот рассказывали, что нужно наоборот изобретать всякие lock-free алгоритмы, чтобы не отвлекаться на соседей.
Забудьте всё, чему вас учили. Тебе впарили concurrency под видом параллелизма.

29 Кб, 639x633
401 24 окт, 18:28 401 1283905

Пока никого нет, померяюсь письками сам с собой

Ответы284060

402 25 окт, 02:14 402 1284060

>>1283905
Чет проиграл c этого челенджа. RunPE 1% смогли только вскрыть? анпакается + дампится за 10 секунд же, втф

Ответы284077

403 25 окт, 02:49 403 1284070

Кто знает,как настроить у x64dbg трасировку как в ольке, а то ето пездец.

Жму Trace > кудаа сохранить лог, а на выходе лог пустой (это в x64dbg)

в ольке же все ок.

Ответы284075

404 25 окт, 03:07 404 1284075

>>1284070
Пишут жи, что надо сначала формат задать. {p:cip} {i:cip}

512x512
405 25 окт, 03:24 405 1284077

>>1284060
Такие нынче реверсеры.

Ответы284080

406 25 окт, 03:25 406 1284080

>>1284077
Судя по количеству эльфов, это линуксореверсеры, им винду нечем, а отлаживаться олькой под вайном - это очень веселое развлечение, я пробовал.

Ответы284081

407 25 окт, 03:29 407 1284081

>>1284080
Зачем отлаживать?
Я большинство статическим анализом и z3 вскрыл (ну нету у меня linux64, android и прочего)

408 26 окт, 04:05 408 1284644

Помогите, плз. Я транслирую фасмом в .obj, затем линкую в polink вместе с kernel32.lib, user32.lib и т.д. Почему-то во время выполнения при вызове любой WinAPI программа падает с access violation. Если же собирать фасмом прямиком в .exe, всё работант норм. ЧЯДНТ?

Ответы284645

409 26 окт, 04:34 409 1284645

>>1284644
Скинь минимальный пример. Скорее всего, ты неправильно определяешь extrn импортов или неправильно их вызываешь. Например, ты делаешь call [ExitProcess], и у тебя ExitProcess - не __imp__ExitProcess@4 (символ с префиксом __imp__ по соглашению ссылается на IAT), а thunk, т.е., _ExitProcess@4: jmp [__imp__ExitProcess@4], т.е., ты читаешь код как адрес, и оно падает. Или ты наоборот делаешь call ExitProcess, а ExitProcess - у тебя не thunk, а элемент IAT, и, конечно, выполнение адреса как кода тоже ни к чему хорошему не приводит.

Ответы284647284649284654285145

410 26 окт, 04:54 410 1284647

>>1284645
Чтобы узнать импортируемые из kernel32.lib символы, я смотрю в kernel32.def сгенерированый polib /makedef для c:\Program Files (x86)\Windows Kits\10\Lib\10.0.17763.0\um\x64\kernel32.lib
и вижу, например, "GetModuleHandleA" ; KERNEL32.dll
и поэтому в .asm файле объявляю внешние символы, например, так:
extrn 'GetModuleHandleA' as GetModuleHandleA:qword
Далее в .asm файле вызываю invoke GetModuleHandleA , 0

Ответы284654

411 26 окт, 05:02 411 1284649

>>1284645
Как, тогда, узнать какие символы импортируются из .lib? Какие мне надо использовать, для вызова процедур из .dll?

Ответы284654

412 26 окт, 05:32 412 1284654

>>1284647
> extrn 'GetModuleHandleA' as GetModuleHandleA:qword
Именно об этом я и говорил. Ты делаешь invoke proc, invoke делает fastcall [proc], fastcall делает call [proc], получается:
call [GetModuleHandleA]
при этом линкер генерирует из библиотеки импорта:
GetModuleHandleA: jmp qword[cs:__imp_GetModuleHandleA]
А надо:
extrn '__imp_GetModuleHandleA' as GetModuleHandleA:qword
(64-битный fastcall декорируется по-другому, поэтому нет второго подчеркивания после imp и собаки с цифрой в конце, как у меня >>1284645 тут).

Или вызывай как fastcall GetModuleHandleA,0 вместо invoke, ничего больше не меняя, тогда fastcall будет делать call GetModuleHandleA, и все будет красиво (кроме лишнего джампа).

>>1284649
> Как, тогда, узнать какие символы импортируются из .lib?
Экспортируются. Возьми 7-Zip, открой .lib-файл как архив, внутри будет 1.txt с нормальными именами (в 2.txt - отсортированные), можешь его куда-нибудь скопировать и там смотреть.

> Какие мне надо использовать
Для виндовых импортов стандартная форма сссылки на IAT: __imp_decorated_name, где первое подчеркивание... в общем, традиционное и присутствует всегда, _imp_ - индикатор импорта, decorated_name в 64-битной винде - просто имя апи. ExitProcess -> __imp_ExitProcess.

Ответы284664285145

3 Кб, 368x147
413 26 окт, 06:02 413 1284664

>>1284654
>Экспортируются
То есть, да.

Зачем в 2.txt два символа для GetModuleHandleA? Чем они отличаются?
522.KERNEL32.dll GetModuleHandleA
522.KERNEL32.dll __imp_GetModuleHandleA

Многие либы 7-zip открыть не может, например, user32.lib, gdi32.lib и другие.

Ответы284670284671

414 26 окт, 06:57 414 1284670

>>1284664
> cannot open file
Хуй знает, у меня всегда работало. 7-Zip слишком старый? Ну dumpbin_или_podump /linkermember:1 filename.lib тогда.

> Зачем в 2.txt два символа для GetModuleHandleA?
Я это два поста подряд писал, ты читал их вообще?

В PE-файлах есть IAT (import address table) - это просто такой большой список адресов типа:
__imp_GetModuleHandleA dq ?
__imp_ExitProcess dq ?
...
и так для каждой импортированной функции (взгляд на уровне линкера). При загрузке винда в эти dq прописывает непосредственно адреса соответствующих функций. Ты можешь сделать call qword[__imp_ExitProcess], т.е., процессор прочитает из кворда __imp_ExitProcess адрес и сделает на него call.

Дальше. Во времена 95 винды, некоторые длл (user32/kernel32, например) были общими для всех процессов. В смысле, не как сейчас, copy-on-write у некоторых секций, а реально общая память - при патче длл в одном процессе память менялась для всех процессов. Это создавало неприятные проблемы при отладке: попытка поставить брейкпоинт на апи-функцию (т.е., заменить первый байт функции на int3) приводила бы к тому, что любой процесс, вызвавший эту функцию падал (потому как если отладчика у процесса не было, исключение от брейкпоинта обработать и восстановить замененный байт было некому). На самом деле, запись в общие длл была вообще запрещена если не использовать хаки вроде вызова VxD-сервиса _PageModifyPermissions, поэтому никто не писал и никто не падал по этой причине, лол, но брейпоинтов не было в любом случае. Чтобы обойти эту хуйню, придумали так называемые thunks, переходники. Компилятор вместо вызова апи функции напрямую, т.е., вместо вот этих call qword[__imp_GetModuleHandleA], генерил переходник (естественно, с поправкой на 32-битность):
GetModuleHandleA: call qword[__imp_GetModuleHandleA]
(имена, опять же, с точки зрения линкера). Это позволяло ставить брейкпоинты на переходники, а не на API, переходники были в самом образе, а не в системной длл, этот образ отладчик мог патчить как угодно, и поэтому вышеописанных проблем не возникало. Потом, когда пришло NT-ядро, в которой общие длл заменили нормальным copy-on-write, механизм все равно остался, потому что: 1) он позволял ставить брейкпоинты на API, вызванные именно твоим модулем, а не кем-то еще (это то, чего ты хочешь в 99% случаев); 2) он позволял уменьшить количество релоков (потому что call [iat_entry] требует абсолютного адреса iat_entry, т.е., в случае DLL - релока к каждому вызову API, а call thunk_entry относительный, и релок нужен только один - в самом thunk для абсолютного адреса в jmp [iat_entry]).

Поэтому у нас два вида символов. Если ты используешь __imp_Name, функция вызывается сразу через indirect call через IAT, если используешь просто Name, линкер генерирует переходник, и делается relative call на переходник, который делает indirect jump через IAT.

В четвертый раз описывать не буду, извини.

414 26 окт, 06:57 414 1284670

>>1284664
> cannot open file
Хуй знает, у меня всегда работало. 7-Zip слишком старый? Ну dumpbin_или_podump /linkermember:1 filename.lib тогда.

> Зачем в 2.txt два символа для GetModuleHandleA?
Я это два поста подряд писал, ты читал их вообще?

В PE-файлах есть IAT (import address table) - это просто такой большой список адресов типа:
__imp_GetModuleHandleA dq ?
__imp_ExitProcess dq ?
...
и так для каждой импортированной функции (взгляд на уровне линкера). При загрузке винда в эти dq прописывает непосредственно адреса соответствующих функций. Ты можешь сделать call qword[__imp_ExitProcess], т.е., процессор прочитает из кворда __imp_ExitProcess адрес и сделает на него call.

Дальше. Во времена 95 винды, некоторые длл (user32/kernel32, например) были общими для всех процессов. В смысле, не как сейчас, copy-on-write у некоторых секций, а реально общая память - при патче длл в одном процессе память менялась для всех процессов. Это создавало неприятные проблемы при отладке: попытка поставить брейкпоинт на апи-функцию (т.е., заменить первый байт функции на int3) приводила бы к тому, что любой процесс, вызвавший эту функцию падал (потому как если отладчика у процесса не было, исключение от брейкпоинта обработать и восстановить замененный байт было некому). На самом деле, запись в общие длл была вообще запрещена если не использовать хаки вроде вызова VxD-сервиса _PageModifyPermissions, поэтому никто не писал и никто не падал по этой причине, лол, но брейпоинтов не было в любом случае. Чтобы обойти эту хуйню, придумали так называемые thunks, переходники. Компилятор вместо вызова апи функции напрямую, т.е., вместо вот этих call qword[__imp_GetModuleHandleA], генерил переходник (естественно, с поправкой на 32-битность):
GetModuleHandleA: call qword[__imp_GetModuleHandleA]
(имена, опять же, с точки зрения линкера). Это позволяло ставить брейкпоинты на переходники, а не на API, переходники были в самом образе, а не в системной длл, этот образ отладчик мог патчить как угодно, и поэтому вышеописанных проблем не возникало. Потом, когда пришло NT-ядро, в которой общие длл заменили нормальным copy-on-write, механизм все равно остался, потому что: 1) он позволял ставить брейкпоинты на API, вызванные именно твоим модулем, а не кем-то еще (это то, чего ты хочешь в 99% случаев); 2) он позволял уменьшить количество релоков (потому что call [iat_entry] требует абсолютного адреса iat_entry, т.е., в случае DLL - релока к каждому вызову API, а call thunk_entry относительный, и релок нужен только один - в самом thunk для абсолютного адреса в jmp [iat_entry]).

Поэтому у нас два вида символов. Если ты используешь __imp_Name, функция вызывается сразу через indirect call через IAT, если используешь просто Name, линкер генерирует переходник, и делается relative call на переходник, который делает indirect jump через IAT.

В четвертый раз описывать не буду, извини.

Показать весь текст
Ответы284672285145

415 26 окт, 06:59 415 1284671

>>1284664
А не можешь выложить user32.lib из десяточного SDK? Может они опять новый формат завезли, а я сижу и не знаю?

Ответы284676

sage 416 26 окт, 07:02 416 1284672

>>1284670
> GetModuleHandleA: call qword[__imp_GetModuleHandleA]
Имелось в виду
GetModuleHandleA: jmp qword[__imp_GetModuleHandleA]
надо было спать идти

417 26 окт, 07:47 417 1284676

>>1284671
https://www.dropbox.com/s/vy5uur6f4p5jez4/User32.Lib?dl=0

Ответы284888

418 26 окт, 14:52 418 1284834

Сап реверсач, раз вы тут про winapi заговорили, то на мой нубский вопрос точно ответите. Где брать адреса/хэши winapi? Например WriteProcessMemory - находится в kernel32.dll по адресу 0x8C1E9A9B. Но откуда этот адрес? Как его узнать? Есть ли список всех адресов winapi? Гуглить пробовал - не смог.

Ответы284853284888

419 26 окт, 15:46 419 1284853

>>1284834
>список всех адресов winapi
Нету. От обновления к обновлению, от версии системы и т.д. они меняются. А что уж говорить про ASLR?
Им дали GetProcAddress, а они по захардкоженым адресам ходют.

Ответы284858

420 26 окт, 15:54 420 1284858

>>1284853
Как так-то! И что делать?

Ответы285266

421 26 окт, 16:44 421 1284888

>>1284834
> Но откуда этот адрес? Как его узнать?
Гуглишь PEB_LDR_DATA, идешь по любому из xxxModuleList, парсишь PE, парсишь экспорты, получаешь адреса. А вообще, да, расскажи, чем тебя GetProcAddress не устраивает? Он делает все то же самое, но абсолютно бесплатно.

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

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

>>1284676
> dropbox
Спасибо. Да, 7-Zip-ом и правда не открывается. Странно, на вид вполне обычная импортлиба. В любом случае, dumpbin/podump все нормально дампят.

Ответы285145

512x512
422 26 окт, 21:40 422 1285015

Сколько надо дрочить с нуля эти ваши assемблеры, чтобы запилить самому пакмена?

Ответы285024285099

423 26 окт, 21:50 423 1285024

>>1285015
Для пакмана в виде прямоугольника и точек - пару недель.

424 26 окт, 23:45 424 1285099

>>1285015
Смотря насколько у тебя пакмен выровнен.

Ответы285108

425 27 окт, 00:03 425 1285108

>>1285099
https://youtu.be/nCPpgt0s70U

426 27 окт, 01:40 426 1285145

>>1284645
>>1284654
>>1284670
>>1284888
Спасибо, тебе анон, огромное. Ты не представляешь, как ты мне помог. Я пару дней не мог сдвинуться с места. Гугление не помогало. Не понимаю, почему всего того, что ты объяснил нет в docs.microsoft и других мануалах.

sage 427 27 окт, 01:46 427 1285146

Всё байтоёбите?

6 Кб, 645x259
428 27 окт, 08:53 428 1285190

Сап двач. Есть код:
s_s segment stack "stack"
dw 12 dup(?)
s_s ends
d_s segment
delitel dw "",0ah,0dh
buffer db 16,0,17 dup(?),"$"
ent dw 0ah,0dh,"$"
d_s ends
c_s segment
assume ss:s_s, ds:d_s, cs:c_s
begin:
mov ax,d_s
mov ds,ax

mov ah,0ch ;очистка буфера
mov al,0
int 21h

mov ah,0ah ;ввод строки
lea dx,buffer
int 21h

mov ah,9h ;delitel
lea dx,ent
int 21h
mov ah,9h ;delitel
lea dx,delitel
int 21h

mov ah,09h ;вывод строки
mov dx,offset buffer+2
int 21h
mov ah,4ch
int 21h
c_s ends
end begin

При выводе строки происходит пикрил т.е. функция 09h выводит не только строку до 0dh включительно, но и не заполненныые элементы массива. ЧЯДНТ?

6 Кб, 645x259
428 27 окт, 08:53 428 1285190

Сап двач. Есть код:
s_s segment stack "stack"
dw 12 dup(?)
s_s ends
d_s segment
delitel dw "",0ah,0dh
buffer db 16,0,17 dup(?),"$"
ent dw 0ah,0dh,"$"
d_s ends
c_s segment
assume ss:s_s, ds:d_s, cs:c_s
begin:
mov ax,d_s
mov ds,ax

mov ah,0ch ;очистка буфера
mov al,0
int 21h

mov ah,0ah ;ввод строки
lea dx,buffer
int 21h

mov ah,9h ;delitel
lea dx,ent
int 21h
mov ah,9h ;delitel
lea dx,delitel
int 21h

mov ah,09h ;вывод строки
mov dx,offset buffer+2
int 21h
mov ah,4ch
int 21h
c_s ends
end begin

При выводе строки происходит пикрил т.е. функция 09h выводит не только строку до 0dh включительно, но и не заполненныые элементы массива. ЧЯДНТ?

Показать весь текст
Ответы285556

429 27 окт, 13:16 429 1285244

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

Ответы285268

430 27 окт, 13:55 430 1285266

>>1284858
а это смотря какая у тебя цель.

Ответы286112

431 27 окт, 13:59 431 1285268

>>1285244
под какую ОС ассемблите?

Ответы285287

432 27 окт, 14:26 432 1285287

>>1285268
Работаем в TASM через dos box

Ответы285324285618

433 27 окт, 15:25 433 1285324

>>1285287
Если пользуешься GNU/Linux дома, рекомендую nasm и методичку Столярова (http://stolyarov.info/books/asm_unix). В принципе, методичка сойдёт и для ваших костылей с tasm & dosbox, кроме прерываний.

434 27 окт, 21:09 434 1285556

>>1285190
> ЧЯДНТ?
Я нихуя не понимаю, что ты вообще делаешь. Почему dw, почему \n\r вместо \r\n, что за delitel dw "", где терминирование введенной строки долларом после ввода? Ты понимаешь, что \d

Что касается спецэффектов - у тебя delitel не терминирован долларом, и это именно он выводит заодно и buffer c мусором. А вывод buffer выводит нихуя, потому что после строки DOS втыкает \r, а \r - это возврат каретки (т.е., вывод продолжается в ТОЙ ЖЕ строке с первой колонки), а после \r нули, которые после возврата каретки затирают все выведенное нахуй. Такие дела.

435 27 окт, 22:25 435 1285618

>>1285287
тогда asmworld.ru тебе по идее хватит.

436 28 окт, 19:06 436 1286017

Сап,стоит ли вкатываться в программирование именно с ассемблера?

Ответы286547286571286775

437 28 окт, 21:16 437 1286112

>>1285266
Хочу спрятать строки от взора яры.

Ответы288390

438 29 окт, 12:13 438 1286332

4 Кб, 620x5325 Кб, 739x2322 Кб, 399x59

>>1216107 (OP)
>>1216107 (OP)
Здраститя, я не понел как в отладчиках считается offset почему он 0000 0000 изменяется в 0000 0010 .. 0000 0020 и тд в каких это единицах (в байтах / битах)?

Подскажите пжалста еще какие-нибудь курсы по отладке, пробовал книгу в шапке "Reverse Engineering для начинающих" но она не подошла потому-что я так понимаю надо C хорошо знать и расписано не очень подробно.

Ответы286468286571286777286796

439 29 окт, 17:19 439 1286468

>>1286332
> почему он 0000 0000 изменяется в 0000 0010 .. 0000 0020 и тд в каких это единицах (в байтах / битах)?
В байтах. Это шестнадцатеричные числа. 10=16 (десятичное).
И зачем ты джпег отлаживаешь?

Ответы286532

440 29 окт, 19:03 440 1286532

>>1286468
изучаю по курсу CrackLab, типо формат файла показывает, он там и txt отлаживает)

441 29 окт, 19:19 441 1286547

>>1286017
Ребят,плз

Ответы288392

442 29 окт, 20:04 442 1286571

>>1286332
> Здраститя, я не понел как в отладчиках считается offset почему он 0000 0000 изменяется в 0000 0010 .. 0000 0020
Не обязательно. В том же HxD у тебя на скрине ты можешь поменять на тулбаре 16 на что-то другое, или вообще нажать ↔, и оно будет адаптировать длину строк к ширине окна. Почему по умолчанию именно 16 (0x10)? Потому что очень удобно иметь дело со степенями двойки. Потому что был реальный режим в x86 с параграфами по 16 байт, т.е., если ты хексдампил сегменты, их адреса и размеры в байтах были выровнены на 16. Потому что строки по 8 байтов (предыдущая степень двойки) были слишком узкие даже для старых мониторов, а строки по 32 байта (следующая степень двойки) в них уже не влезали, они и сейчас-то не у всех влезают, да и искать нужный байт взглядом в таких строках менее удобно.

>>1286017
Очевидно, что ответ на вопрос зависит от того, для чего тебе это нужно. Например, ты хочешь ебать железо, или хочешь вкатиться в реверсинг - да, стоит, потому что даже если ты начнешь с Си, тебе все равно придется узнать про существование ассемблера, адресов вместо указателей и всего такого прочего. Если тебе просто кодить на каком-нибудь JS или Python, то лучше не стоит.

Ответы286729

443 30 окт, 00:19 443 1286729

>>1286571
Первое интересно,да.

444 30 окт, 01:50 444 1286775

>>1286017
Стоит вкатываться в программирование именно с ассемблера.

445 30 окт, 01:53 445 1286777

>>1286332
>я так понимаю надо C хорошо знать
Надо ассемблер хорошо знать. Читай, писать на нём что-то не самое тривиальное.

446 30 окт, 03:43 446 1286796

>>1286332
>по отладке
>Reverse Engineering
Далеко не одно и то же.

447 31 окт, 11:40 447 1287456

>>1283674
Ну что-ж вы, аноны? Какие идеи? Хотя бы пошлите меня куда-нибудь скажите, в какую сторону копать.

Ответы287687287803

448 31 окт, 18:48 448 1287687

>>1287456
Наверное в сторону специальных процессоров.

449 31 окт, 21:05 449 1287803

>>1287456
Тебе уже все сказали. Хочешь неполноценные ядра, работающие синхронно - смотри на GPU, там как раз такое. В нормаольных процах и на нормальных ОС этого не было и не будет, потому что нахуй не нужно.

FASM 450 1 ноя, 09:40 450 1287989

Кароче, у меня есть метка handle, мне нужно занести по адресу 0000:0024h сегмент и смещение этой метки, как можно на FASM это сделать?

Ответы288004

451 1 ноя, 10:09 451 1288004

>>1287989
Зависит от формата. Сегмент у тебя либо уже в cs/ds (если com), либо у него есть имя (если exe). Ну и пишеш:
push 0
pop es ; ES = 0
mov word[es:24h],handle
mov word[es:24h+2],ds_или_имя
А вообще есть функция DOS int 21h/ah=25h, чтобы прерывания перехватывать.

Ответы288006

452 1 ноя, 10:13 452 1288006

>>1288004
В FASM'е никак нельзя сегмент метки узнать? Например как в других ассемблерах поставить seg, пытался - выдало ошибку

Ответы288007

453 1 ноя, 10:17 453 1288007

>>1288006
Ну я ж написал, имя есть.
format mz
entry code:start
segment code
start:
...
mov word[es:24h+2],code

А в .com у тебя всегда один сегмент, текущий, он у тебя при запуске программы лежит в сегментных регистрах, во всех трех, выбирай любой.

Ответы288015

454 1 ноя, 10:26 454 1288015

>>1288007
У меня не com, а загрузчик.
Просто хочу узнать, можно ли средствами FASM узнать сегмент метки, без сегментных регистров, мам, пап и кредитов

Ответы288017

455 1 ноя, 10:34 455 1288017

>>1288015
Ты не можешь узнать сегмент метки, потому что фасм его не знает. Никто не знает на этапе ассемблирования, в какой сегмент попадет код, когда его запустят. Это узнает... загрузчик исполняемых файлов. В рантайме. И он свои знания кладет в cs/ds/es (com) или (в случае exe), патчит по табличке этими знаниями твой код там, где ты использовал имя сегмента.

> У меня не com, а загрузчик.
Тогда сегмент знаешь ты. Ты же указываешь абсолютный org фасму? Если у тебя стандартный загрузчик под BIOS, который по 0000:7c00h грузится, твой сегмент равен 0 (внезапно, правда?). И опять же, ты можешь узнать его из CS в рантайме, если не веришь мне.

456 1 ноя, 20:41 456 1288390

>>1286112
ну, если ты, например, забираешься в чужой процесс и можешь использовать VirtualProtectEx, можешь возле image base пошуршать по таблице импортов и найти адрес, куда был загружен адрес интересующей тебя winapi функции. если этой функции нет, то можешь найти адрес загрузки системной библиотеки в целевой процесс, и уже у него пошуршать в экспортах. если virtual protect использовать не разрешают, то тебе предварительно придется обойти UAC, я где то видел на гитхабе репозиторий с описанием около сотни способов, из которых актуальны процентов 20. если же ты хочешь вообще нахуй разъебать файл библиотеки на диске, то тут если ты придумаешь, как обойти контроль целостности либ тебе надо просто по РЕ структуре пройти и найти свою целевую функцию, заебашить ей детур или чё ты там собрался делать, пересобрать либу, пересчитать контрольную сумму в заголовках файла и в теории твой хук всегда будет в системе

457 1 ноя, 20:43 457 1288392

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

Ответы288529

458 2 ноя, 01:25 458 1288529

>>1288392
а с чего бы ты посоветовал начать?

Ответы288787288821

459 2 ноя, 14:35 459 1288787

>>1288529
С ассемблера.

Ответы288803

460 2 ноя, 15:24 460 1288803

>>1288787
Хорошая рекомендация, потом правда жизни ни на что другое уже не хватит.

461 2 ноя, 16:33 461 1288821

>>1288529
я бы советовал определиться с направлением, к которому ты предрасположен
мобайл - java&android sdk для быстрого старта, iOS и языки, поддерживаемые его сдк. java в целом универсальный язык, может еще где пригодится
веб - C# с его .net core/node.js с его js/ts
десктоп - нахуй не нужен уже, но если приложение сложно вынести в веб сервис, то C#&WPF для личных/корпоративных целей, C++ & Qt для коммерческих
IoT, embedded - C/asm, как повезет

Ответы288826

462 2 ноя, 16:38 462 1288826

>>1288821
ну и реверсинг/ачкеринг - C/C++, asm

463 2 ноя, 23:25 463 1289072

>>1216107 (OP)
С хуя ли Си-пидоры так хейтят GOTO который является аналогом инструкции jump?
Они там ебанулись совсем?

Ответы289099

464 3 ноя, 00:25 464 1289099

>>1289072
С хуя ли использовать какие-то там jump, если можно срать процессору прямо в instruction pointer? Ишь навыдумывали коллы, реты, джампы какие-то. Функции на этом городят. Ебануться просто.

465 5 ноя, 14:46 465 1290087

Посоветуйте мануалы по написанию модулей ядра.

Ответы290251

466 5 ноя, 20:23 466 1290251

>>1290087
Всё для вас:
http://wiki.kolibrios.org/wiki/Kernel/ru
Хоть бы указал, мил человек, под какое едро ты компеляеш

467 6 ноя, 00:17 467 1290386

>>1216107 (OP)
>Reverse engineering
Аноны, как вкатиться в это?
Есть технических диплом никому не известного университета, но опыта, знаний нет.
Читаю книгу из оп списка, смотрю видео на ютабе. Но везде требуют 4-5 лет опыта, поиск уязвимостей и тд и тп. Это для борщехлебов или есть компания готовая взять джуном и вырастить его до специалиста. Мне тема интересна, готов вечерами после работы сидеть, но где бы ее еще найти.

Ответы290454

468 6 ноя, 01:55 468 1290454

>>1290386
Ты сначала реверсить научись.

469 8 ноя, 17:55 469 1291809

Аноны, есть ли почитать по макОс?
В книге из оп поста описывается виндовс.

Ответы291883

470 8 ноя, 19:45 470 1291883

>>1291809
0) Устанавливаешь Windows XP
2) Читаешь ОП пост
Какальтернатива, ебись с радаром 2.

Ответы291901

471 8 ноя, 20:19 471 1291901

>>1291883
Да нет, я о приложениях под макос.

Ответы292728

472 9 ноя, 10:19 472 1292135

>>1218732
таки приделали дебаггер к гуям радара
http://radare.today/posts/cutter_debug/

Ответы292136

473 9 ноя, 10:35 473 1292136

>>1292135
Надеюсь там можно по F7/F8 трассировать? А не как в, прости господи, gdb.

474 10 ноя, 02:09 474 1292646

Посоны, а кто-нибудь решал задачки Юричева?
https://challenges.re/
Я понял, что происходит тут: https://challenges.re/3/
Но нихуя не пойму, что это может быть за алгоритм, нахуя это

Ответы292648292914

475 10 ноя, 02:12 475 1292648

>>1292646
На crc похоже.

Ответы292802292914

476 10 ноя, 11:48 476 1292728

>>1291901
тебе что надо конкретнее? есть такая довольно Лоу-лвл книга: https://www.amazon.com/Advanced-Mac-OS-Programming-Guides/dp/0321706250

477 10 ноя, 14:10 477 1292802

>>1292648
Спасибо, мил человек, действительно похоже

sage 478 10 ноя, 16:10 478 1292914

>>1292648
>>1292646
> На crc похоже.
Чем? Наличием таблицы? Лол, да любую байтоеблю можно свести к таблицам. Нет, и близко нет.

1) CRC - это побитовое деление с остатком, т.е., должен быть цикл. Цикла нет.
2) Можно оптимизировать биты до байтов (но цикл останется), тогда будет таблица из 256 (каждое возможное значение байта) слов шириной n бит, где n - степень полинома (для CRC32 - дворды). Тут элементов в таблице явно меньше.
3) CRC предполагает xor (т.к., он там "вместо" сложения используется). Тут xor нет вообще.

Зато тут есть or. И если внимательно посмотреть на код, видно, что оно распространяет (дублирует) установленные биты вправо (сначала по одному, потом по два и так далее):
1001 -> 1101 -> 1111

Фактически, таким образом число округляется вверх до следующей степени двойки - 1 (т.е., 2n - 1 = строка из n единичных битов). Дальше есть два варианта:

1) "Я читал Hacker's Delight", тогда алгоритм вспомнится, или его можно просто найти в книге (несмотря на измененные константы).
2) "Не читал и даже https://graphics.stanford.edu/~seander/bithacks.html не листал". В результате округления, описанного выше, у нас получаются только 32 возможных варианта, можно просто тупо и бездумно протестить каждый, чтобы увидеть паттерн.

Ответ: это branchless реализация clz, которая выдает -1 для отрицательных интов, она даже в вики есть.

479 13 ноя, 08:15 479 1294691

Сап реверсач, на днях осознал, что хочу стать malware-аналитиком. По-мимо того, что мне нужно разобраться с ассемблером, c/c++, python, выдрочить весь winapi, включая недокументированные функции, владеть стеком tcp/ip и шарить в IOT, другие подводные есть?

Ответы294833

sage 480 13 ноя, 14:09 480 1294833

>>1294691
> что хочу стать malware-аналитиком
Это как дворник, только еще более скучно и обидно. Если настолько себя не ценишь - лучше иди в вебмакаки.

> выдрочить весь winapi
Windows API не настолько важно, как ядро. И да, миром Windows жизнь не ограничивается.

Ответы294970

481 13 ноя, 17:45 481 1294970

>>1294833
А что не скучно? В вебмакакинг точно не пойду, если деградировать, то только в по-байтоёбски. Думаю вот между машобом и реверсом.

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

Ответы295312

482 14 ноя, 11:37 482 1295312

>>1294970
> малварь в юзверь-моде сидит же обычно
Но чтобы понимать, что в юзермоде происходит, тебе нужно понимать, как все работает. А все самое интересное делает как раз ядро.

12 Кб, 353x142
483 15 ноя, 01:04 483 1295652

>>1216107 (OP)
есть одна прога на свифте, скомпилена под арм. В ней захардкожен один ключ. У меня есть исходники проги, но без ключа. Вопрос, можно ли вообще и если да, то как найти этот ключ?

Ответы295661

484 15 ноя, 01:57 484 1295661

>>1295652
cheat engine попробуй

Ответы295662295741

485 15 ноя, 02:05 485 1295662

>>1295661
а, в глаза ебусь

486 15 ноя, 08:51 486 1295741

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

Ответы295876

sage 487 15 ноя, 15:35 487 1295876

>>1295741
Ищи строки вокруг ключа, он будет рядом.

488 18 ноя, 08:31 488 1297045

Анон, помогай! Есть таблица системных вызовов шинды.
https://j00ru.vexillium.org/syscalls/nt/64/
Как обращаться к апи я знаю, но как мне использовать эти системные вызовы напрямую? Что мне делать то с этими байтоёбскими значениями, чтобы получить желаемый результат, без вызова native/win api. С меня тонны нефти.

И еще вопрос. Можно ли это все дело организовать на C++ без использования ассемблерных вставок или все же придется учиться байтоёбскому ремеслу?

Ответы297059297073

489 18 ноя, 09:33 489 1297059

>>1297045
>на C++
Что ты здесь забыл? Учи ASM, блеять.

Ответы297785

490 18 ноя, 10:39 490 1297073

>>1297045
>без вызова native/win api
sysenter

Ответы297785

491 19 ноя, 19:17 491 1297785

>>1297073
>>1297059
Пиздец, довыебывался я с этими вызовами и поломал шинду. Да виртуалку было ставить лень, классика.
Короче, ну их нахуй. Ниосилятор пока что.

492 20 ноя, 13:45 492 1298151

Предпринял попытку исправить баг в одной старой RTS (Battle for Middle Earth - любая часть).
Возможно, у кого-то возникнет технический интерес и желание помочь если не делом, то советом.

Я настрочил стену текста на основе того, что уже успел узнать, но она получилась слишком большой, так что вот.
https://pastebin.com/HSWaQPr0

Ответы298154

493 20 ноя, 13:47 493 1298154

>>1298151
Была идея проследить за данными, которые приходят в сокет, чтоб понять, куда в конце концов попадают команды (после расшифровки, да) и, соответственно, отследить, откуда игра черпает информацию для отображения дальнейших действий. Возможно, это бы пролило свет на природу задержки.

Но пока что не смог реализовать подобное.

48 Кб, 985x551
494 24 ноя, 12:26 494 1300459

Привет, некрофилы. Есть задача вывести число пи с точностью до сотых. Пишу на fasm. Мое решение на пикрилейтед. Все норм, но интуиция подсказывает, что где-то в системных dll-файлах (может быть, в том же msvcrt.dll) должны быть забиты и константы. Так ли это? Если так, то как их извлечь?

Ответы300527300538

sage 495 24 ноя, 16:08 495 1300527

>>1300459
sub esp,8
fldpi
fstp qword[esp]

Ответы300551

496 24 ноя, 17:04 496 1300538

>>1300459
Константа PI в самом FPU есть - FLDPI.

Ответы300551300622

497 24 ноя, 17:57 497 1300551

>>1300527
>>1300538
Спасибо

Ответы300553

sage 498 24 ноя, 18:00 498 1300553

>>1300551
Да не за что. А вот про __cdecl ты все же почитай и стек чистить научись.

Ответы300555

499 24 ноя, 18:04 499 1300555

>>1300553
>стек чистить научись
Зачем?

>__cdecl
Согласен, с соглашением о вызове надо разобраться.

Ответы300562

sage 500 24 ноя, 18:20 500 1300562

>>1300555
> Зачем?
В данном простом примере, да еще и с exit в конце - незачем. А вот если бы ты это в цикле вызывал или из вложенных функций, то тебя ждал бы сюрприз, потому что все функции, которые ты вызываешь - __cdecl, они за собой не чистят, и тебе нужно самому выталкивать из стека все то, что ты туда напихал (на самом деле, нет, просто add esp,скольконапихал).

Ответы300576

501 24 ноя, 18:46 501 1300576

>>1300562
>тебя ждал бы сюрприз, потому что все функции, которые ты вызываешь - __cdecl, они за собой не чистят
Я так думал, что стек зацикленный. То есть от FFFFFFFF до 00000000, и снова FFFFFFFF. Разве нет?

Ответы300593

sage 502 24 ноя, 19:59 502 1300593

>>1300576
Ну как бы да, но не в реальной системе с виртуальной памятью. В винде у тебя зарезервированы под стек адреса, ну допустим, 0x00030000-0x00130000 (1 мегабайт), из них выделены при старте процесса только последние 4-8К (адреса и размеры зависят от версии винды и от значений в заголовке exe-шника). Когда ты заполняешь выделенный кусок стека, система тебе выдает еще немного памяти, и так, пока весь зарезервированный регион не кончится. А когда он закончится, ты получаешь исключение по поводу переполнения стека. Но проблема не в этом. Проблема в том, что если ты сделаешь:
hello_message db 'Hello, world!',10,0
main: call hello
push 0
call [exit]
hello: push hello_message
call [puts]
ret
то последний ret прочитает из стека не адрес возврата в main, а адрес hello_message, который никто из стека не убрал. Процессор попытается по нему перейти, начнет выполнять мусор вместо инструкций, и ты упадешь.

Ответы300598

503 24 ноя, 20:05 503 1300598

>>1300593
>пока весь зарезервированный регион не кончится. А когда он закончится, ты получаешь исключение по поводу переполнения стека
А почему система не может вернуть меня на начало стека при его переполнении?

Ответы300611300615

504 24 ноя, 20:26 504 1300611

>>1300598
>поводу переполнения стека
>А почему система не может вернуть меня на начало стека при его переполнении?
Тогда будут затираться данные в начале стека. Если я правильно помню, там лежит адрес вызвавшего процесса, куда должно быть передано управление после того, как твоя программа отработает. Если ты его затрёшь, то пиздец.
Поправьте, если я не прав.

Ответы300615

505 24 ноя, 20:32 505 1300615

>>1300598
> А почему система не может вернуть меня на начало стека
Потому что это явный баг, и ты потрешь и потеряешь какие-то данные. Поэтому, чтобы не усугублять, ты падаешь (точнее, ты можешь отловить исключение и сделать wraparound, но зачем?).

>>1300611
Если мы про винду, то нет - в конце стека адрес заглушки, прибивающей текущий поток (и/или процесс), чтобы возврат из функции по entrypoint завершал программу. Если про DOS, то в начале сегмента CD 20 лежит, оно же int 0x20, оно же местный exit(), а в конце - ret, который возвращает на этот же самый int 0x20.

506 24 ноя, 20:50 506 1300622

>>1300538
В FPU есть основание натурального логарифма?

Ответы300625

507 24 ноя, 20:55 507 1300625

>>1300622
The constants that can be loaded with these instructions include +1.0, +0.0, log210, loge, π, log2, and log2.

39 Кб, 466x686
508 24 ноя, 23:58 508 1300720

Аноны, почему getchar не срабатывает? Если убрать первую часть кода со scanf, все пашет. Пробовал выполнить getchar дважды — все работает. То есть, видимо, scanf конфликтует с getchar, хз. Помогите, плиз.

Ответы300728

sage 509 25 ноя, 00:28 509 1300728

>>1300720
1) stdin line-buffered, т.е., если буфер ввода пуст, то сишный рантайм ждет ввода строки и считывает ее целиком (включая \n на конце).
2) scanf при обработке спецификатора пропускает пробелы до него, но не после, т.е., не вычитывает \n после %d. Можешь очищать буфер каким-нибудь заклинанием уровня https://ideone.com/J0eduZ (извращение, и, к тому же, потребует дополнительную строку, если в буфере УЖЕ пусто). Алсо, чтобы не повторяться >>1291763
3) У тебя не Си, у тебя msvcrt и никакой кроссплатформенности, поэтому можешь пользоваться всякими getch()/getche() и прочими лирше(), которым на буфер похуй. Первый раз в своей жизни агитирую за использование функций из conio.h, и считаю их наилучшим решением проблемы... во всяком случае, пока ты ReadConsole()/SetConsoleMode() не осилишь.

Ответы300729300733

sage 510 25 ноя, 00:30 510 1300729

>>1300728
> лирше()
kbhit().

511 25 ноя, 00:53 511 1300733

>>1300728
>getch()/getche() и прочими лирше()
Из какого это dll?

Ответы300740

19 Кб, 836x240
sage 512 25 ноя, 01:21 512 1300740

>>1300733
Из того же. Прошу прощения, думал, что экспортируется по-традиции, без подчеркивания.

50 Кб, 571x793
513 25 ноя, 13:33 513 1300873

С#к@, в рот е@л этот ассемблер, ни#R не понятно. Почему эта хрень не работает, но этот же код, если заменить %f на %X, работает правильно. В чем проблема? Тут уже писали, что scanf говно. Чем тогда заменить?

Ответы300907

514 25 ноя, 14:39 514 1300907

>>1300873
Все, разобрался, нужно было заменить %f На %lf.

515 25 ноя, 15:24 515 1300941

Анонасы, где можно скачать, самую йоба-версию идочки? С меня как всегда.

Ответы300960

sage 516 25 ноя, 16:08 516 1300960

>>1300941
7.2 вроде не утекла еще. А так, на ру начинается, на трекер заканчивается.

Ответы301012

517 25 ноя, 18:42 517 1301012

>>1300960
Спасибо.

Анончики подскажите еще одну вещь. Есть ли какие-нибудь годные книги по винде? Желательно что-нибудь свежее + x64.

21 Кб, 655x218
518 25 ноя, 19:33 518 1301031

ГДЕ FLOAT?

Ответы301057

519 25 ноя, 19:53 519 1301037

ПЕРЕКАТ
>>1301036 (OP)
>>1301036 (OP)
>>1301036 (OP)
>>1301036 (OP)
>>1301036 (OP)
>>1301036 (OP)
>>1301036 (OP)
ПЕРЕКАТ
>>1301036 (OP)
>>1301036 (OP)
>>1301036 (OP)
>>1301036 (OP)
>>1301036 (OP)

sage 520 25 ноя, 20:25 520 1301057

>>1301031
У сишки для функций с переменным числом аргументов выполняются промоушены, там правил много, но в целом так: все, что меньше int, кастится в int, float кастится к double, остальное как есть. Соответственно, нет никакого способа передать float в функцию с переменным числом аргументов. Как раз поэтому %f для scanf хочет указатель на float (указатель никуда не кастится), а %f для printf хочет дабл и получит дабл, даже если ты передашь float: printf("%f", 1.0f). В ассемблере, естественно, за тебя никто ничего промоутить не будет, и тебе нужно самому об этом заботиться.

521 2 дек, 04:55 521 1304627

>>1221300
https://www.pouet.net/bbs.php?category=code
можно попробовать (если зайдет) demoscene.ru/forum/viewforum.php?f=4
А вообще, IRC, чувачок. Да, IRC до сих пор... В 2018-м ты, конечно устанешь искать канальчики, если тебе просто так не дали. Кое-кто перелез в телеграм. А так инфа, ты не поверишь, до сих пор выходит в виде магов прям на самих платформах.
По pouet'у если поищешь, есть релизы с source code. Начни с мелкотухи в 2^n байт, шанс что ты сделаешь что-то законченное сильно вырастет.

Тред утонул или удален.
Это копия, сохраненная 20 декабря 2018 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.

« /pr/В начало тредаВеб-версияНастройки/a//b//mu//s//vg/Все доски

Пользуетесь скринридером — пишите, что можно улучшить.
Host-Food.ru — надёжный хостинг от 12 руб/мес | Free DNS
Зеркала М.Двача: m2ch.hk, m2ch.lib, m2chfapiswfw2wcakptqp4o6ltgchvjuxfab7urxlduraomtlnhw5xad.onion