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

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
ASM & Reverse engineering №4 /asm/ 1126092 В конец треда | Веб
В этом треде мы изучаем самый компактный и низкоуровневый язык Ассемблер и смежную с ним область: Реверс-инженеринга (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
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/

Предыдущие
№2 https://arhivach.org/thread/255168/
№3 https://arhivach.org/thread/301316/

Абу пидарас убери рекапчу
2 1126681
Ну и где?
image.png1 Кб, 467x39
4 1128309
Что делает эта инструкция?
Почему при двух идентичных состояниях регистров (кроме ebp/esp) она в ecx пихает совершенно разные значения?
sage 5 1128378
>>128309
FS - сегментный регистр, ссылающийся на сегмент с ненулевой базой, в котором по FS:0 лежит структура TEB. В TEB по 0x18 лежит "нормальный" адрес TEB. А по 0x2c лежит адрес массива указателей TLS, индексируется TLS-индексом, назначенным системой для модуля или выделенным с помощью TlsAlloc() (динамический TLS). Если это статический TLS, тогда по указателю лежит область памяти, содержащая thread-local переменные модуля. В противном случае все зависит от реализации.

> она в ecx пихает совершенно разные значения?


Массив выделяется из кучи при создании процесса, соответственно и адрес плавает.
6 1129102
А для ковыряльщиков микроконтроллеров есть что?
7 1129133
>>129102

Есть => /ra/
8 1129661
>>126688
Предлагаешь воспользоваться имеющимися наработками? Или просто ознакомиться для большего понимания*
9 1130199
Компилирую программу простую программу
int main() {return 1234;}
под turbo c compiler (1987-88 г.)

скажите,почему в обджект файле все так просто (получил через obj2asm):

;_main:
pushBP
movBP,SP
;; movAX,04D2h
jmp shortL8 хотя sourcer пишет что это delay for I/O, но никаких I/O не происходит
;L8: popBP
ret

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

Interrupt 1Ah : Real time clock ah=func xxh
Interrupt 1Ah : ah=00h get system timer count cx,dx
Interrupt 21h : DOS Services ah=function xxh
Interrupt 21h : ah=25h set intrpt vector al to ds:dx
Interrupt 21h : ah=30h get DOS version number ax
Interrupt 21h : ah=35h get intrpt vector al in es:bx
Interrupt 21h : ah=40h write file bx=file handle
Interrupt 21h : ah=4Ah changememory allocation
Interrupt 21h : ah=4Ch terminate with al=return code
10 1130200
;_main:
push BP
mov BP,SP
mov AX,07CEh
jmp short L8
;L8: pop BP
ret
sage 11 1130246
>>130199
Избавься от main(), и к тебе не будет прилинковываться сишный рантайм.
12 1130300
>>130246
Доступно)
Screenshot1.jpg49 Кб, 401x584
13 1130757
поделитесь ссылкой на более-менее свежий hiew. Ну, 8,53-8.60.
И вообще, насколько необходим этот инструмент?
sage 14 1130880
>>130757
Хиев нинужен. Хочешь пердолиться в консольку - возьми радар.
15 1131605
>>130880
спасибо! Я так и знал, что Сусликов - пидор. Тот же Hex Editor Neo по возможностям, имхо, перекрывает хуёв. как только manhunter не ослеп пердолиться в консольку? Но в последнем можно патчить в мнемониках асма..
Вообще, нужен опыт, тот же CyberGod на кряклабе круто запатчил Personal Editor 64: всего два байта.., но как он их нашёл? Какой логикой? Байты отстоят далеко от сообщений о регистрации, вложенность большая, нет однозначного джампа - есть sete и последующая проверка регистра х/з где..
п.с. может, конечно, нашёл старую версию и патч к ней и посмотрел примерные места патча..
16 1132353
>>131605

>но как он их нашёл? Какой логикой?


Уверен, не без помощи IDA.
image.png56 Кб, 976x337
17 1133044
Неофит ITT. Зачем в программе раскиданы CC? Антиотладочный прием? Если да, поможет ли замена CC на 90 везде, где можно? Может кто нибудь рассказать про флаг TF если не ошибаюсь. Он вроде включается, когда подключен отладчик, и даже kernel32.isDebuggerPresent уже особо не нужен, это так? Если да, как такое обходить?
18 1133172
>>133044

> Неофит ITT. Зачем в программе раскиданы CC? Антиотладочный прием?



Просто заполнение пустых мест между функциями (как видишь адреса функций выровнены). Перекресных ссылок на них нет, так что заменить можешь на что угодно и ничего не поменяется. Ну а CC используется исторически чтобы случайно не выполнить непойми что когда хакер Васян тебе переполнение стэка устроит.
19 1133202
>>133172
Дополню: смысл не столько в этом. Смысл еще и в том, чтобы остановить спекулятивную предвыборку инструкций, потому что чаще всего инструкции следующей функции никому нахуй не вперлись.
Безымянный.png8 Кб, 369x142
20 1133231
>>126092 (OP)
Памахити с ida pro 7.0.
Или ее криво взломали, или она сама кривая... В общем, если сделать синхронизацию сначала основного листа с псевдо-кодом, а затем с Hex'ом, то Ida закрывается с ошибкой на картинке.
Самостоятельно не фиксится, может, есть какой-то способ?
Я знаю, что можно переключаться по табу, и даже привык к этому, но если есть что-то, то дайте мне знать об этом.
И еще, в 6.8 версии было намного удобнее с Hex-листом, так как нужное значение строки при наведении в asm-листе постоянно переносилось влево, но тут hex статичен. Че делать, как исправить?
image.png9 Кб, 341x126
21 1133641
Помогите прочесть значения регистра FS в интерфейсе olly. Что значит FS 0053? И что значит 270000 (FFF)? Единственное описание этих полей, которое я нашел - это 0053 - текущее значение FS, 270000 - размер сегмента, а FFF - максимальное значение в нем. Но из этого описания я не понял как, например, перейти в hex dump'е в этот регистр? Проста тупа Go to 270000 - это оно?
sage 22 1133842
>>133641

> И что значит 270000 (FFF)?


База (старт) и лимит.

> Но из этого описания я не понял как, например, перейти в hex dump'е в этот регистр?


Перейти в сегмент, ты хотел сказать? Да, можешь просто ввести адрес. А можешь Ctrl+G в окне дампа и сказать [fs:0x18] (по офсету 18 в fs хранится адрес, тот же самый, что ты видишь в окне регистров).
23 1133844
>>132353
Спасибо, Кэп!
подскажи лучше, как сделать более "понятной" Иду? Чтобы как в х64/odbg показывались значения переменных, дампа, регистров, стека. Чтобы строки автоматом писались в виде комментариев в листинг, чтобы условные бряки ставить на стек и регистры, чтобы поиск строк был более хороший (а не как сейчас, пока не укажешь - не ищёт)
24 1134365
Кто нибудь может в двух желательно целую лекцию словах рассказать о роли structure exception handler'ах в антиотладочных мерах? Я так понимаю, это когда мы делаем
бац:
__try{
__asm int 0x3
}
__catch()
{
bool debuggerDetected=false;
}
?
Если да, то как это перехитрить и распознать в асм-листинге и если я не прав то что это вообще такое?
25 1134391
Пишу свой ассемблер, решил избавиться от call-ов. Только jmp-ы, только хардкор. Какие подводные камни? Пример:

huipizda:
inc eax // делаем какую-нибудь хуйню
jmp ebx // прыгаем обратно. это обязанность коллера проставить правильный ebx
sage 26 1134406
>>134365
Ну это древний скучный трюк, им даже ольгу первую не задурить вроде. Суть простая - дебаггер использует int3 (0xcc) для брейкпоинтов. Брейкпоинт вызывает исключение, исключение передается дебаггеру. Если дебаггер тупой, то не сымитирует для отлаживаемой программы исключение, а просто проглотит его и продолжит. Если программа не отлаживается, или отладчик нормальный, исключение никто не проглотит, управление получит обработчик исключения в программе и выставит флаг.
sage 27 1134408
>>134391

> jmp ebx // прыгаем обратно. это обязанность коллера проставить правильный ebx


Твоя функция вызывается более чем из одного места. Куда прыгать будешь, куда мать посадишь?
28 1134420
>>134391
Никаких, когда у тебя MIPS, ARM, OpenRISC или RISC-V.
А когда у тебя x64, M68k или SPARC — жри сладкий хлебушек и не проси больше.
29 1134423
>>134408
У меня лейблы - это, считай, номера строк. Перед джампом в регистр пишеться, куда "функции" потом джампать:

mov ebx some_label
jmp huipizda
И в хуйпизде:
jmp ebx
Все.

Динамеские лейблы, короче.
30 1134432
>>134420
Да не, он у меня вообще будет интерпретироваться, игрушка считай.
sage 31 1134445
>>134423
И чем это отличается от call?
32 1134464
>>134423
Тебе нужена инструкция branch & link как в АРМах. Только если хуйпизда другие функции вызывает, придется как-то адреса возврата менеджить. На стек складывать или по фиксированным адресам, если reentrancy не нужно.
33 1135821
Думаю, это известно, что большинство античитов занимаются вычислением хеша разных частей памяти процесса, дабы избежать хука.
Мне один пиндос с OC рассказал что можно якобы безопасно хукать d3d9.Direct3DCreateEx ибо этим занимается не только малварь, а еще и фрапс, для захвата видео, к примеру.
Насколько это правда?
34 1136238
>>135821
кури Proxy Dll или Dll Hijacking - можно что угодно хукать, не вмешиваясь в код процесса
35 1136936
Здравствуйте! Играю в Smash The Stack на io.netgarage под x86 и на пятом уровне возникли проблемы с осуществлением переполнениея буфера, в связи с чем есть вопрос.

Собственно вопрос: а в сегментах данных исполняться нельзя что ли? А в сегменты исполняемого кода в таком случае писать вообще можно? Как же тогда делать атаку через переполнение буфера, если нет сегментов, которые одновременно и для записи и для исполнения? Я пришёл к такому выводу, потому что через GDB у меня всё работает как я задумал, а без него программка сегфолтится.

Не хочу, чтобы вы мне рассказывали как проходить уровень, но хотелось бы, чтобы кто-нибудь ответил на мой вопрос про сегменты и пояснили про них поподробнее, если мои подозрения верны.
36 1137177
Есть ли анализатор вызова функций для js?
Тот что на 2 пикче из ОП поста.
sage 37 1137295
>>136936
По-хорошему, исполняться из .data нельзя, потому что NX-бит, а можно ли писать в .text - зависит от линкера (чаще нет). Атаку на переполнение буфера можно делать через ROP.

>>137177
Теоретически ODA есть, но она говно. Зачем тебе на JS? Как вообще тебе в голову JS приходит, когда ты думаешь о байтоебле?
38 1137648
>>137295

>Как вообще тебе в голову JS приходит, когда ты думаешь о байтоебле?


Байтоёб уровня /b/ пишет на JQuery на жабаскрипте. Ну хотя бы от нуля считает.
39 1137741
Пацаны, такая тема, ковыряю игру короче http://www12.plala.or.jp/zeek-heil/usio.htm, хочу извлечь тексты игровые, специально взял небольшую игрушку, потрениться. Дак вот, у неё движок kirikiri, на сайте https://kindkanjistudio.wordpress.com/2015/06/08/перевод-и-kirikiri-часть-1/ про распаковку такого exe-шника сказано пользоваться утилитами типо - https://tlwiki.org/?title=Tools#KiriKiri2.2FKAG3 , но я не могу понять, никакая из них не может схавать этот exe-шник (либо я коряво их запускаю), однако ResourcesExtract-ором, я смог распаковать exe-шник. Но там лежат только иконки и файлы расширения .bin, совсем не xp3 и я не могу понять чё с ними делать. Подскажите как добраться до текстов игры.
40 1137754
>>137741
В /vn/ не пробовал обратится? Тут сидят суровые дядьки, ковыряющие Asm, а не скрипты интерпретаторов.
41 1137757
>>137295

>Теоретически ODA есть, но она говно. Зачем тебе на JS? Как вообще тебе в голову JS приходит, когда ты думаешь о байтоебле?


Да всякие редиректы и части js эксплоитов.
42 1137758
>>137754
спасибо, там какой-то тред про реверс визуалок и в правду есть
sage 43 1137799
>>137757
Ааа, тебе flow именно JS-кода? Нет, таких не знаю. Напиши, лол.
44 1137899
Поставил точку останова ИТТ.
45 1138030
>>137899
Проиграл.
46 1138160
>>137295

> Атаку на переполнение буфера можно делать через ROP.



Спасибо большое за подсказку про NX бит и про ROP! Почитаю про это.
47 1138901
Посоветуйте красивые и мощные IDE для асма, шобы изпоткаропки всё летало без еботни с поиском линкеров, компиляторов, трансляторов, автокомплит, интеллисенс, вот это всё.
49 1139535
>>138901
имхо, за этим будущее, среди аутистов, прогающих фо фан:
http://www.easycode.cat/English/index.htm
ставишь fasm, настраиваешь пути, редактор ресурсов, удаляешь прочие компили. Собирает одной кнопкой под х86/х64, полные либы и инклуды, большое сообщество (фасма). В visualmasm понравился файл помощи по API в hlp, хотя, для профессионалов надо качать новый сдк.
sage 50 1139546
Сосоны, чего почитать чтобы сочинить свой калькулятор, т.е. для полного неофита? Алсо желательно под современные ОС, а не под ДОС.
51 1139728
Пригождается ли знание асмы?
52 1140190
>>139728
Смотря кому.
53 1140895
Собираюсь вкатиться в изучение асма. Но так как просто так изучать его нет смысла, собираюсь совместить его с полезным делом. В частности, хочу я запилить свою собственную сетевую ОС для некоторых сетевых устройств - маршрутизаторов, коммутаторов, точек доступа и аппаратных МСЭ.
Собственно, чем отличается создание реализаций сетевых протоколов на асме от создании на нём каких-либо других приложений?
Как я понимаю, сетевым интерфейсам, по-сути как и любым другим устройствам, выделяется некая область памяти, которая играет роль буфера I/O. Процессор считывает из этой области данные и, в соответствии с инструкциями сетевого протокола, их обрабатывает. Есть ли какие-либо мануалы/статьи, в которых описывается работа сетевых интерфейсов на самом низком уровне (не считая, собственно, непосредственное преобразование данных в электромагнитные волны на линии передачи данных)?
sage 54 1140974
>>140895

> Собственно, чем отличается создание реализаций сетевых протоколов на асме


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

> выделяется некая область памяти


Не совсем. В общем случае девайс знает, что некоторый регион адресного пространства - его собственный (иногда это захардкожено, иногда девайс можно ремапить, изменяя этот регион). Девайс висит на некоторой системной шине и перехватывает запросы к своим адресам, таким образом чтение идет из его собственной внутренней памяти. Например по 0-0x20000000 у тебя DRAM, а по 0x60000000-0x60001000 - Ethernet MAC. А уж что у него там внутри - многокилобайтный FIFO или всего лишь десяток 32-битных регистров - зависит от реализации. Где-то DMA есть, который будет вместо тебя процессора копировать данные из оперативки, а где-то единственное, что доступно - это постоянная долбежка регистра своими байтиками, а где-то вообще TCP в железе реализован, включая автоматические ретрансмиты.

> Есть ли какие-либо мануалы/статьи


Есть. Берешь даташит на железку, и там будет описано, как инициализировать, куда срать и как получать данные. Нет даташита? Ты в жопе. Даже при наличии существующих прошивок разобраться, как конкретно работать с железкой - очень сложная и времязатратная затея.
1472676648-7963a5927d16a13d3b9447c8316ca95f[1].png206 Кб, 500x281
55 1141234
А вообще на сколько сложно устроиться на работу в офис/удаленку по соответствующему направлению? Сложно ли выполнять типичные задачи? Я вот пока разбираю семплы в свое удовольствие, но начинаю думать уже про трудоустройство. Призываю бывалых.
56 1141299
Что называют перекрёстными ссылками?
57 1141337
>>141299
Это когда ты переходишь по ссылочке, а там есть ссылочка, чтобы вернутся обратно.
58 1141338
Есть ли профит от изучения асмы, если хочу пойти по стопам бати в системное программирование?
59 1141391
>>141234
по реверсу без хорошего опыта работу найти анрил, ток в антивирусные лабы , паттерны для антивирей клепать
60 1141399
>>141338

>хочу пойти по стопам бати


Твой батя вкатывался лет 15-20 назад, наверное. Сейчас в системное программирование почти никого не берут, там одни деды остались. Хотя если батя сможет устроить куда-нибудь, то почему бы и нет, главное, чтобы вышка была профильная.
61 1141502
>>141391
хороший опыт это больше, чем распаковка вмпрота 2 версии? 3 пока не могу
62 1141527
Народ я тут велосипед изобретаюсвою ос с блекджеком и шлюхами, но пруфоф не будет, посоветуйте где почитать про устройство файловых систем, а то сейчас просто через dd указываю где на образе hdd будет лежать загрузчик, ядро и прочая мелочь. Ну а то, желание прикрутить какой нибудь fat16 есть, а понимания как это сделать нету
63 1141530
>>141399
Деды выйдут на пенсию и придется брать новых.
64 1141552
>>141530
Ты хоть для самого себя ответь нужен ли тебе асм? Писать код на ассемблере без желания мазохизм в чистом виде.
65 1141585
>>141530
Брать некого, т.к вся молодежь ушла в веб
66 1141616
Почему вот это:
ADC BYTE PTR [EAX + ECX], BYTE PTR [EBX + ECX]
или
ADD BYTE PTR [EAX + ECX], BYTE PTR [EBX + ECX]
не компилируется? Я так понял, первый операнд у AD? - обязательно регистр, но чому так? Или просто так исторически сложилось и 2 области памяти никак не сложить?
sage 67 1141659
>>141616

> посоветуйте где почитать про устройство файловых систем


В википедии. Там ссылка на спеку MS по FAT есть.

>>141616

> Я так понял, первый операнд у AD? - обязательно регистр


Нет. В инструкции может быть только один memory operand. Первый он или второй - дело твое.

> просто так исторически сложилось


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

> 2 области памяти никак не сложить


Нет. Загрузи один из операндов в регистр.
68 1141662
>>141659

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


Понял, об этом не подумал.

>Нет. Загрузи один из операндов в регистр.


Не, я понимаю, что можно байт скинуть в DL и его прибавлять к области памяти, просто думал может я чего то не знаю и есть однокомандное решение
69 1141709
Что за хуйня пикрелейтед? Собрал win32 приложение на c++ без всяких либ, только чуть чуть winapi. Успешно запускал в ollydbg несколько раз, всё работало, а потом, после очередной компиляции, бац! и пикрелейтед. Какие то обработчики исключений, какие то DB F2, что это всё значит? В исходниках всего этого нет. Причем, если не аттачить дебаггер, то программа работает нормально и в отладчике, который идёт в комплекте с vs 2017 тоже всё нормально дебажится. ЧЯДНТ?
sage 70 1141715
>>141709
0xf2 - префикс REP. Наличие REP RET втыкатеся в целях оптимизации, потому что в амуде кривой бранч-предиктор. Отключи в настройках ольки superfluous prefixes в одной из вкладок Analysis.
71 1141724
>>141715
Эта опция уже была выключена. Что еще интереснее, я создал новый проект с теми же исходниками, и один раз он сработал, а потом снова нет
72 1141753
>>141709
>>141715
семены, просто выпилите рантайм и все. во время обучения он ни к чему.
там в настройках линкера пошарь SAFESEH и тп
ну или погугли как написать пакер и настрой визуалку в соответствии с рекомендациями (там они обычно настроены под уменьшение размера экзешника)
sage 73 1141755
>>141753

> выпилите рантайм


> приложение на C++


Охуительные советы уровня /b/.
74 1141757
>>141715

> амуде кривой бранч-предиктор


да-да, там в доке даже интеловском так написано по оптимизации. а какого вы лвл`а, коллега?
sage 75 1141758
>>141724
Просто надо было включить, а не выключить.
76 1141759
>>141755
моя ошибка)) но сехи же можно выпилить, да и в целом заточить под минимальный размер
77 1141762
>>141724
Я пробовал включать. Всё равно та же херня
>>141759
>>141753
звучит как костыли какие то. И самое главное - это не объясняет, почему раз в 3-4 пересборки приложение ведет себя адекватно, а потом снова как сука дикая
78 1141776
>>141762
у вас руки не от туда растут(( вот тут проскрольте до dynamicbase и чекните как настраивать компил
80 1141778
>>141776

>dynamicbase


и как релоки создают проблему для олли? разве они восстанавливаются после входа в OEP? и в коде у меня никакой анальной привязки к дефолтному 0x400000 нет.
81 1141781
>>141778
вы блять не на oep, а на crt прологе, для начала обучения она нихуя не нужна
просто выпилите ее и отлаживайте что попроще
sage 82 1141782
>>141762

> И самое главное - это не объясняет, почему раз в 3-4 пересборки приложение ведет себя адекватно


Инкрементальная линковка. Какие-нибудь profile-based оптимизации? И я все равно не вижу проблемы в префиксах. Оно должно работать. Если не работает, скинь проблемый exe, я завтра гляну.
83 1141785
>>141782
он просто не понимает, что это за код

> Какие то обработчики исключений, какие то DB F2, что это всё значит? В исходниках всего этого нет

84 1141786
крч выпили crt и все, прям по пунктам из статьи выше
85 1141789
>>141781
Разве crt-пролог выполняется до передачи управления на OEP?

>просто выпилите ее и отлаживайте что попроще


>>141785
>>141786
Это всё здорово, но объясните пж почему раз в N попыток программа нормально дебажится в олли, и всегда дебажится через дебаггер в вижаке и работает, если запустить как отдельный процесс? Как на это влияет c runtime, и что это за херня с исключениями в начале, для чего она генерируется?
image.png21 Кб, 801x336
86 1141790
>>141789
Проебался со скрином иды.
image.png43 Кб, 961x557
87 1141791
>>141790
Ну вот щито это? Это ли вообще гасит олли? Дело ли в олли, или в чем то другом?
88 1141796
>>141789

> Разве crt-пролог выполняется до передачи управления на OEP?


в данном контексте пролог был принят за мусор, а так на oep и находится

> исключениями в начале, для чего она генерируется?


советую почитать нарваху/каран
sage 89 1141822
>>141789

> что это за херня с исключениями в начале


Так у тебя исключения от CRT лезут? Это нормально. Добавь в список игнорируемых и нажми Ctrl+F9.
90 1141947
>>141715
Вот бы тебя в сенпаи.
91 1141955
>>141947

>Вот бы тебя в сенпаи.



Виабу штоле?
92 1142266
>>141585
Все молодешь ГеЙПиДОрыЪ
93 1142281
В общем, кажется проблема была вообще не в этом. Удалил служебные файлы олли рядом с её .ехе и всё заработало
94 1142287
>>141955
Нет.
Ну в наставники, не суть.
95 1142365
как в цикле (JNZ loopAnchor ) сравнить 2 числа (reg, imm ИЛИ reg, reg), где второе число > 0 и при этом позволить изменить ZF но сохранить CF? CMP как я понял херит CF, т.к. флаги меняются как после SUB, TEST обнуляет CF. Думал было сохранять CF через LAHF, но потом я не могу его восстановить через SAHF, т.к. мне нужен ZF, а SHR AH, 1 может внезапно ZF в 0 поставить
96 1142401
>>142365
всё, вроде догодался.
97 1142578
Аноны, который уже вкатились, сколько вам лет?
98 1143125
>>141502
сходи на собеседование с ними, поболтай, задания посомтри какие. поймешь что да как, да они подскажут что подтянуть. На хабре полистай блок касперского антивируса, там всякие крекми есть интересные.
99 1143130
>>141585

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


так мейнстрим же. вкатываться легче.
А с реверсом/и глубоким пониманием что и как - надо быть упорнее, времени много тратить, опыт как то набирать. А с этим сейчас сложнее. Это раньше когда был диффицит информации, как то что есть, то и хавал, и все соки выжимал, и эксперементировал чтоб понять что и как. А сейчас информации море, тонешь в ней, порой дольше гуглишь решение, чем сделать несколько попыток самому победить. :(
Сам несколько раз пытался в это вкатиться, но работу работать надо, и еще много чего. Еще в универе надо было вкатываться :(
Интересно-интересно, но времени нет совсем :(
100 1144604
>>143125
у них там хуевый блог)) вот у eset куда лучше
101 1144605
>>143125

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


спасибо за совет, приму))
102 1144815
>>141391
Насколько нудно клепать патерны?Из этого вообще развитие есть?
103 1144881
Кто-нибудь понимает в asm extended? Как мне вытащить значения из стека в массив?
https://pastebin.com/LA6HBKYH
sage 104 1145026
>>144881
Ты и сюда пришел? Объясни, чего ты хочешь добиться. Зачем тебе инлайн-асм, зачем тебе lea?
void foo(int anything) { uinptr_t stack_copy[20]; memcpy(stack_copy, &anything, sizeof(stack_copy)); }
И все. Если нужен адрес вовзрата, то копируешь не с anything, а с ((uintptr_t *) &anything) - 1.
105 1145070
>>145026
Инструкция call пушит значение регистра процессора eip на стек, как мне в функции вытащить этот адрес?
sage 106 1145071
>>145070

> Если нужен адрес вовзрата, то копируешь не с anything, а с ((uintptr_t *) &anything) - 1.

sage 107 1145072
>>145071
Алсо, если все делать правильно (для поддержки чего-то большего, чем x86), то в гцц внезапно есть __builtin_return_address(0), в других компиляторах тоже есть аналоги. Инлайн-асм зло.
108 1145075
>>145072
Круто, а я и не знал про это, спасибо.
109 1145080
>>145072
А можно ли как-то получить из адреса строку ассемблерного кода?
110 1145126
>>145080
имеешь в виду понять, что за инструкция по адресу? только дизассемблировать
111 1145291
Ньюфаг в треде. Есть %программа_нейм% заранее скомпилированная с флагами -fno-stack-protector и -execstack с помощью gcc. В проге изначально нет проверки на размер введенных данных. Если запускать прогу через gdb и использовать при вводе строку с определенным количеством символов и payload`ом, то payload успешно запускается. Если просто запускать программу в терминале, то та же самая строка с payload`ом приводит к сегфолту. В чем дело? Имеет место быть ASLR? На пикриле исходник программы и output dbg.
112 1145441
>>145291

> Имеет место быть ASLR?


Ну так сделай printf("%p", main); в обоих случаях, и узнаешь сам. Другие указатели (буфер, например) тоже посмотри.
rev.PNG114 Кб, 957x568
113 1145909
>>145441
Ньюфаг все еще на связи. Судя по пикрилу имеет место быть таки ASLR, но вот особенность: последний байт адреса все время равен de. То, что первые три байта равны x00\x00\x55 еще ладно, но почему последний то все время один и тот же. Это происки gcc?
sage 114 1145928
>>145909
Не de, а 6de. И это перестает быть удивительным, если вспомнмить, что размер страницы - 0x1000 (4096) байт, т.е., 12 младших бит адреса задают смещение внутри страницы. Загрузчик, вне зависимости от того, рандомизируется ли адрес загрузки или нет, оперирует именно страницами - загружает файл в начало страницы, секции выравнивает на страницы, ядро права ставит страницам и т. д., поэтому ничего удивительного в этом нет.
reve6.PNG146 Кб, 1584x690
115 1146934
>>145928
Я так понял, ты о пикриле говоришь. Но возникло несколько вопросов:
1) В отладчиках отображаются линейные адреса?
2) Если используются линейные адреса, тогда что подразумевается под словом "отображение"?
3) Насколько велика разница между понятиями виртуальная и линейная память?
116 1146949
>>146934

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



Линейная память (она же "плоская модель") - это когда не используются селекторы сегментов и вся память имеет непрерывное адресное пространство. В 64-битном режиме это единственная модель (в 32 битном режиме тоже можно использовать переключаемые через cs gs fs сегменты, но там они работают по другому - как указатели на таблицу дескрипторов). С сегментами и таблицей дескрипторов как раз связан один из костылей штеуд архитектуры, что страничная адресация работает поверх сегментного механизма и нам все равно нужно выделить минимум 1 сегмент размером со всю доступную оперативу.

Реальная память есть только в досе с ограничением в 1 мегабайт. Все что современнее 95 винды использует виртуальную память. И ядро операционной системы тоже виртуальную память использует, все отличие лишь во флагах привелегий на страницах и в том что операционная система имеет возможность в том числе и сама себе страницы выделять. Для 64-битного режима полная процедура выглядит так:

https://wiki.osdev.org/Entering_Long_Mode_Directly
sage 117 1147084
>>146934

> Я так понял, ты о пикриле говоришь


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

> Если используются линейные адреса, тогда что подразумевается под словом "отображение


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

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


Линейные и виртуальные адреса можешь считать синонимами. Термин "линейная память" вообще не существует, есть линейное адресное пространство и адресация.
119 1147521
>>147515
Знает кто где скачать полный курс данных видосов по at&t Ассемблеру в Линуксе? На канале CSC их почемуто ненашел, нашел только отдельные копии на других каналах
120 1147683
В какую сторону мне нужно точить жало, если я задумал сменить классическую виндовую блокировку ОС на свою кастомную и с кастомным анлоком? Перехват какого нибудь winlogon? А если хочу к уже существующему экрану блокировки добавить пару функций? Насколько это вообще осуществимо и задокументировано?
sage 121 1147702
>>147683
Версия ОС? Раньше GINA была, в которой можно было все, теперь winlogon credential providers, в которых почти нихуя нельзя (документация у MS на сайте). Да, можно патчить винлогон, логонуи и прочих.
122 1147706
>>147702
Начнем с win10, опционально win 7 → win 10
123 1147724
>>147702

>теперь winlogon credential providers


Чёрт. В этой ОС есть места, которые не портят при обновлении?
ОП
124 1147808
>>147724
Хуясе, человек в проприентарном софте делает какие-то хотпатчи и жалуется на то что их ломает очередное обновление.
# OP 125 1147825
>>147808
Я ревершу до состояния исходников, которые обратно компилируются в идентичный код, а не патчу существующие.
А жалуюсь я на урезание возможностей настройки. Когда читал "Внутреннее устройство Microsoft Windows", мне очень понравилась продуманность идеи с GINA, можно было написать своего провайдера авторизации хоть по измерению длины члена с фото с вебки, а сейчас узнаю, что всё опять порезали. И так везде, возможность настройки постоянно урезают, кнопки прибивают гвоздями. Проводник в сраной XP можно было изменить до неузнаваемости, любую панельку или менюшку можно было перетащить или вовсе отключить. А сейчас всё прибито гвоздями, и люди радуются каким-то сраным 3,5 настраиваемым нанокнопочкам в заголовке. Тьфу, что я тут распинаюсь.
126 1147984
Решил вкатиться в forth, начал с книжки Leo Brodie, Starting FORTH. Всё вроде было заебок, пока не дошло до всех этих BLOCK, LIST, LOAD. Пробовал gforth, win32forth, sp-forth, всё это или не работает, или работает через жопу. ЧЯДНТ?
127 1148181
Может кто нибудь рассказать что из себя представляет экран блокировки windows (win7+)? Это отдельный процесс, который запускается на весь экран? Или это просто explorer.exe подкидывает другой desktop?
128 1148188
>>148181

>Или это просто explorer.exe подкидывает другой desktop?



this
image.png40 Кб, 764x569
129 1148203
>>148188
Сможет ли пользовательский процесс получить десктоп в нулевой сессии? Если я получу хэндлер десктопа, то в него можно запихнуть окно? Как мне получить десктопы, порожденные explorer'ом? Вообще, судя по пикрилейтед десктопы над процессами в иерархии, получается процесс может создать десктоп, но владеть им не будет, максимум иметь хэндл на него?
# OP 130 1148347
>>148203

>Сможет ли пользовательский процесс получить десктоп в нулевой сессии?


Нет, она онально огорожена от кулхацкеров.
131 1148731
Пытаюсь использовать для отладки линуксовых приложений связку ida + gdbserver, но в ответ "Bogus or irresponsive server", хотя на таргет-клиенте видно, что TCP-подключение состоялось. Результаты подключения на пикрилах. ЧЯДНТ?
132 1148823
>>148731
Чому у тебя на первом скриншоте отладка виндового приложения? Тебе нужно делать Attach->Remote GDB debugger.
rev5.PNG993 Кб, 1915x955
133 1148892
>>148823
На том скриншоте не туда нажал, но суть не меняется: при таком подключении выдает "bogus or irresponsive server". Я пытаюсь подключиться через Debugger -> Run -> Remote Linux Debugger.
Если пытаюсь использовать Debugger -> Attach -> Remote Linux Debugger, то выдает то же самое.
zzg5beyt0Q.jpg16 Кб, 200x200
134 1149094
>>148892

>kali pinus


>ida


>virtualbox


>win


Ясно
sage 135 1149173
>>148892
Суть не меняется. Тебе слишком рано что-то делать в IDA. Для начала тебе нужно научиться читать: Remote GDB debugger. То, что ты выбираешь - это когда ты собственный линуксовый стаб от IDA (из IDA/dbgserv/ копируешь в Linux и работаешь через него.
136 1149192
>>149173
Я сразу пункт с GDB и не заметил, но мне от этого ничуть не лучше: я забыл что elf у меня 64-битный, а ида нет. Полную версию иды без вшитых васянами вирусами не найдешь. А ценник конский.
sage 137 1149195
>>149192
Седьмая ида совершенно 64-битная, совершенно легально и фриварно лежит на официальном сайте. С возможностями там не очень, ограничения мешают жить, но x86 есть. Посмотри, может оно в отладку тоже умеет.
# OP 138 1149253
>>149192

>Полную версию иды без вшитых васянами вирусами не найдешь.


Прямо на рутрекере, антивири ругаются только на файл патчера ИДЫ, чтобы она открывала старые базы, созданные в пиратских версиях, можешь этот файл просто не качать, если больше доверяешь продажным анивирусам, чем мочераторам и пользователем рутрекера. Я скачал, брат жив, микроволновка греет еду.
image.png10 Кб, 490x199
139 1150965
ПАЧИМУ БЛЯТЬ
140 1150969
>>150965
патамушта
mov [bx], dl
sage 141 1150981
>>150969
Или хотя бы без ptr
142 1151135
>>150981
Но мне же нужно положить DL в нижнее слово, находящееся по адресу BX. Или это что, мне надо сделать какой нибудь
AND DX, 00FFh
MOV [BX], DX
?
sage 143 1151363
>>151135
Да. Или movzx dx,dl (на байт короче).
144 1155972
Не тоните
145 1156059
Сап прогуны, есть тут ктонибудь, кто пишет на асме для mc68k? Или я один такой даун?
146 1156434
Как на masm32 изменить какой-нибудь пиксель на монике, выдать какой нибудь писк на аудио выход? Хочу уже что-нибудь прикольное сделать.
sage 147 1156487
>>156434

> изменить какой-нибудь пиксель на монике


invoke GetDC,0
mov esi,eax
invoke SetPixel,esi,1,1,0ffff00ffh
invoke ReleaseDC,0,esi

> выдать какой нибудь писк на аудио выход


invoke MessageBeep,-1

Для остального идешь на MSDN и читаешь документацию по интресующей теме.
148 1156586
>>156434
Про внутренний бипер тебе уже сказали >>156487
Если хочется именно через аудио выход, то придется пердолить имеющиеся в системе audioApi.
149 1156796
>>156487
>>156586
Спасибо
150 1156965
Суп, анонасы. Решил покопать сишную библиотеку avr-libc под свой микроконтроллер после того как увидел что в ней нету функции pgm_read_block() для чтения из памяти, а функция eeprom_read_block() для EEPROM'а есть.

Ну и залез в функцию pgm_read_word() которая возвращает 16-битную переменную по адресу в программе и что же я вижу:

#define __LPM_word_enhanced__(addr) \
(__extension__({ \
uint16_t __addr16 = (uint16_t)(addr); \
uint16_t __result; \
__asm__ \
( \
"lpm %A0, Z+" "\n\t" \
"lpm %B0, Z" "\n\t" \
: "=r" (__result), "=z" (__addr16) \
: "1" (__addr16) \
); \
__result; \
}))

Описание для lpm здесь: http://www.microchip.com/webdoc/avrassembler/avrassembler.wb_LPM.html

Вкрации: lpm читает один байт по адресу, а мы получается читаем байты по адресу 160 и 176, как я понял.

То есть одно 16-битное слово занимает 32 бита в програмном пространстве?
Если да, то почему это так сделано?
151 1156975
>>156965

> То есть одно 16-битное слово занимает 32 бита в програмном пространстве?


Попробуй яснее выражать свои мысли.

Нет. 16-битное слово занимает 16 бит. Но адресация для LPM байтовая, т.е., ты кормишь ему адрес байта (адрес слова * 2 байта в слове) в отличие от других инструкций, где ты кормишь адрес слова. LPM по-прежнему читает слово, но возвращает только один из байтов. Какой именно - зависит от младшего бита.

> а мы получается читаем байты по адресу 160 и 176


Чо?
image.png15 Кб, 372x246
152 1156998
>>156975
Ну вот эта часть кода:

"lpm %A0, Z+" "\n\t" \
"lpm %B0, Z" "\n\t" \

Что именно делают эти инструкции? Они разве не из соседних слов читает? Для двойного слова инструкция выглядит так:

#define __LPM_dword_enhanced__(addr) \
(__extension__({ \
uint16_t __addr16 = (uint16_t)(addr); \
uint32_t __result; \
__asm__ \
( \
"lpm %A0, Z+" "\n\t" \
"lpm %B0, Z+" "\n\t" \
"lpm %C0, Z+" "\n\t" \
"lpm %D0, Z" "\n\t" \
: "=r" (__result), "=z" (__addr16) \
: "1" (__addr16) \
); \
__result; \
}))
sage 153 1157010
>>156998

> lpm %A0, Z+


Прочитали в младший байт result младшие 8 бит 16-битного слова, инкрементировали Z. В Z при этом установился младший бит, т.е., следующий lpm прочитает старший байт.

> lpm %B0, Z+


Прочитали во второй байт кусок result старшие 8 бит 16-битного слова, инкрементировали Z, при этом младший бит сбросился (1 + 1 (mod 2) = 0), тем самым мы перешли к чтению младших 8 бит следующего 16-битного слова.

> lpm %C0, Z+


Прочитали младшие 8 бит второго 16-битного слова, инкрементировали Z (младший бит установился), чтобы в дальнейшем прочитать старшие 8 бит.

> lpm %D0, Z


Прочитали старшие 8 бит второго 16-битного слова. Z инкрементировать не стали, т.к., больше ничего читать не собираемся.
154 1157042
>>157010
Окей, а зачем там "\n\t" нужно?
sage 155 1157050
>>157042
Куда ты лезешь, если такого не знаешь? Инструкции в __asm - это текст. Чтобы инструкции были на разных строках, воткнули символ новой строки (\n), чтобы в листинге все было красиво выровнено, воткнули символ табуляции (\t). Если не втыкать эти символы, будет __asm("lpm %A0, Z+lmp %B0,Z+ итд.".
156 1157062
>>157050

>Куда ты лезешь, если такого не знаешь?



Ну я же говорю, так на С писал, сейчас решил библиотеки раскопать, а там ассемблер оказывается.
sage 157 1157065
>>157062
Так это и есть стандатный сишный синтаксис строковых литералов.
158 1157068
Не уверен в сишный тред или к вам писать, но у меня ещё вопросы есть, которые ближе к вам, чем к си поэтому напишу сюда.

Из пиков видно, что массив чаров объявлен раньше интов, а адрес у него больше. Это доказывает, что стэк растёт от большого адреса к маленькому. Но зачем так? И что в тех 12ти байтах после конца массива интов (804) и перед началом массива чаров (810)?

Как происходит малок? Это же операционная система должна найти место в памяти подходящего размера и записать в таблицу кем эта память занята. Так же и с виртуальной памятью. Или это всё на уровне хардвара в процессоре реализовано? Или как например происходят другие системные вызовы типа гетчар? Вот это процессор точно не может сам сделать. Значит процессор как-то отличает мою программу от программы операционной системы и помогает им общаться? Но как?
sage 159 1157076
>>157068

> что массив чаров объявлен раньше интов, а адрес у него больше. Это доказывает


Ровно нихуя не доказывает. Другой компилятор мог положить локальные переменные в другом порядке. Чтобы узнать, куда растет стек, нужно хотя бы раскидать локальные переменные по разным функциям:
void bar(int arg) {
printf("bar.arg at %p\n", arg);
}

void foo(int arg) {
printf("foo.arg at %p\n", arg);
bar(0);
}

int main(void) { foo(0); }

> И что в тех 12ти байтах после конца массива интов (804) и перед началом массива чаров (810)?


Что угодно. Другие локальные переменные, временные переменные, созданные компилятором. Можешь сдампить память и узнать (или компилировать с -S и или -save-temps и узнать гораздо быстрее и точнее).

> Как происходит малок?


Как-нибудь. Почитай K&R, там было чуть ли не упражнение по написанию своего маллока.

> Это же операционная система должна найти место в памяти подходящего размера


Менеджер кучи просит у ОС большой кусок памяти и поддерживает какую-нибудь свою структурку (например, linked list), в которой хранит список свободных и занятых блоков. Если в списке блоков нужного размера не находится, просит у ОС еще кусок памяти и т. д.

> Или как например происходят другие системные вызовы типа гетчар?


getchar() реализуется через read(), который реализуется через одноименный системный вызов. Дергается какое-нибудь программное прерывание или его аналог, процессор сохраняет контекст, переключается в привелигированный режим, код ОС дергает железку за порты, переключается обратно, восстанавливает контекст и продолжает выполнение. Ну это если MMU/MPU есть. Если нет, то просто дергаются функции ОС.

Можешь почитать классическую "Архитектуру компьютера" Таненбаума, там все гораздо более подробно.
sage 159 1157076
>>157068

> что массив чаров объявлен раньше интов, а адрес у него больше. Это доказывает


Ровно нихуя не доказывает. Другой компилятор мог положить локальные переменные в другом порядке. Чтобы узнать, куда растет стек, нужно хотя бы раскидать локальные переменные по разным функциям:
void bar(int arg) {
printf("bar.arg at %p\n", arg);
}

void foo(int arg) {
printf("foo.arg at %p\n", arg);
bar(0);
}

int main(void) { foo(0); }

> И что в тех 12ти байтах после конца массива интов (804) и перед началом массива чаров (810)?


Что угодно. Другие локальные переменные, временные переменные, созданные компилятором. Можешь сдампить память и узнать (или компилировать с -S и или -save-temps и узнать гораздо быстрее и точнее).

> Как происходит малок?


Как-нибудь. Почитай K&R, там было чуть ли не упражнение по написанию своего маллока.

> Это же операционная система должна найти место в памяти подходящего размера


Менеджер кучи просит у ОС большой кусок памяти и поддерживает какую-нибудь свою структурку (например, linked list), в которой хранит список свободных и занятых блоков. Если в списке блоков нужного размера не находится, просит у ОС еще кусок памяти и т. д.

> Или как например происходят другие системные вызовы типа гетчар?


getchar() реализуется через read(), который реализуется через одноименный системный вызов. Дергается какое-нибудь программное прерывание или его аналог, процессор сохраняет контекст, переключается в привелигированный режим, код ОС дергает железку за порты, переключается обратно, восстанавливает контекст и продолжает выполнение. Ну это если MMU/MPU есть. Если нет, то просто дергаются функции ОС.

Можешь почитать классическую "Архитектуру компьютера" Таненбаума, там все гораздо более подробно.
sage 160 1157077
>>157076
Бля, в коде в printf & забыл, ну ты понял.
161 1157078
>>157076
Бля. Это мне только литературы добавило. Ок. После этой книги те прочитаю.
162 1157080
>>157078
>>157076

Спасибо забыл сказать. Спасибо
163 1159683
Подскажите как в Ассемблере перевести восьмеричную систему счисления в двоичную. Как перевести то я разобрался, а вот как записать восьмеричное число не могу.

-a 100
mov ax,6
mov bx,7
mul bx
mov bx,ax
mov cx,8
shl bl,1
mov al,0
adc al,30
int 29
loop 10d
int 20
sage 164 1159811
>>159683
Я нихуя не понял, что у тебя за код, и зачем там int 29. А как переводить:
1) Обнуляешь регистр с результатом.
2) Сдвигаешь регистр с результатом на 3 бита влео.
3) Берешь очередной символ восьмеричного числа, преобразуешь в двоичный вид (вычитаешь ASCII-код '0').
4) Объединяешь с результатом через add или or.
5) Повторяешь с шага 2.
Или тебе обратно нужно? Тогда берешь очередные три бита, прибавляешь '0', кладешь в буфер, повторяешь. При необходимости выводишь задом наперед.
165 1160089
>>159811
А как код выглядит тогда?
166 1166210
На правах бампа - вот такие схемы как на 2 и 3 оп-пиках чем делаются? Идапро? Так любую программу можно представить, если она на Си?
167 1166394
>>166210
Это graph view в иде. На чем написано - не имеет значение.
168 1168152
Вопрос по структуре РЕ файла. Я правильно понимаю, что по VA из 12 data directory DATA_DIRECTORY_IMPORT_IAT хранятся расположенные подряд заглушки, куда загрузчик впишет адреса функций, а в каждом дескрипторе импорта во 2 data directory DATA_DIRECTORY_ENTRY_IMPORT в поле FirstThunk пишется RVA, который указывает на первую заглушку в области [DATA_DIRECTORY_IMPORT_IAT]?
sage 169 1168404
>>168152

> который указывает на первую заглушку в области


На первую для данного дескриптора.
170 1168582
>>168404
Ну да, это я забыл уточнить. В остальном всё верно?
sage 171 1168818
image.png11 Кб, 600x130
Операция с mov 172 1169370
Надо занести в адреса из ds секции, что ниже, обычные integer. Если просто вписываю 5 без ебли с регистром edx — все работает. a и b — параметры функции.

Инструкция:

mov edx,
mov dword ptr ds:[0x9DB2B8], 0
mov dword ptr ds:[0x9DB2B4], edx
mov edx, [a]
mov dword ptr ds:[0x9DB2BC], edx
mov dword ptr ds:[0x9DB2C0], edx
mov byte ptr ds:[0x9DB2C8], 1
Операция с mov 173 1169372
>>169370

Дополнение: еблёй с edx регистром нихуя не работает. Что неправильно в инструкции?
sage 174 1169654
>>169372
Ты бы на русском для начала писать научился. ЯННП. В инструкции все так. В первой строке, очевидно, нужно второй операнд дописать. Префикс ds: можно выкинуть.
175 1169813
>>169654
Маня, эти адреса в ds секции. Это основы ассемблера.
sage 176 1169849
>>169813
Какие секции в 32-битном защищенном режиме, поехавший? И вообще, ты с сегментами путаешь.
177 1170282
Так вышло, что мне нужно делать кое какие вещи с произвольным PE файлом. Например, добавление нового импорта не созданием дескриптора импорта в конце таблицы импорта, а вставкой в существующий, если импорт такой библиотеки уже есть или вообще вставить свой код в уже существующий. Насколько я знаю, мне нужно учитывать, что такие манипуляции приведут к тому, что все инструкции с операндами-адресами в исполняемых секциях будут указывать не туда, куда нужно. Кажется, для решения проблемы с адресами не нужно написать дизассемблер или его функционал, которым я бы анализировал все инструкции, и если один из операндов - адрес, то к нему нужно прибавить дельту, которая образуется в результате моих действий. На данный момент я рассматриваю x86 архитектуру. Сейчас я на следующей стадии: вот я считал и распарсил PE файл и имею под рукой указатель на начало секции и начинаю считывать побайтно. Насколько я понял, каждая инструкция имеет общую структуру, и я типа должен как то понять по первому байту что это за инструкция. Тут у меня несколько вопросов.
0. Не проебался ли я где то в рассуждениях выше? Ничего не пропустил и ничего не переусложнил?
1. Я поискал различные списки инструкций x86 и охуел от всяких расширений типа FPU, SIMD, MMX, SSE1/2/3/4. У них там какие то свои стеки, свои регистры, охуеть. Я как бы вообще не реверсер, но те несколько раз, что я расчехлял иду и олли, я никогда не видел всех этих st(0) FPOPA MMX и всего прочего. Из того, что я прочитал об
этих расширениях мне показалось, что это всё как бы виртуальная хуйня, которая всё равно в конечном счете преобразуется в голый классический x86 с его классическими ADD EAX EBX. Это так?
2. Можете посоветовать годных и максимально современных гайдов по написанию дизассемблера, где были бы приведены в коде структуры инструкции, процесс парсинга и всё такое? Всё, что я находил, там просто в общих чертах говорилось о структуре команды и всё такое, но никакой прям особой конкретики и подводных камней, которые мне кажется должны быть.
177 1170282
Так вышло, что мне нужно делать кое какие вещи с произвольным PE файлом. Например, добавление нового импорта не созданием дескриптора импорта в конце таблицы импорта, а вставкой в существующий, если импорт такой библиотеки уже есть или вообще вставить свой код в уже существующий. Насколько я знаю, мне нужно учитывать, что такие манипуляции приведут к тому, что все инструкции с операндами-адресами в исполняемых секциях будут указывать не туда, куда нужно. Кажется, для решения проблемы с адресами не нужно написать дизассемблер или его функционал, которым я бы анализировал все инструкции, и если один из операндов - адрес, то к нему нужно прибавить дельту, которая образуется в результате моих действий. На данный момент я рассматриваю x86 архитектуру. Сейчас я на следующей стадии: вот я считал и распарсил PE файл и имею под рукой указатель на начало секции и начинаю считывать побайтно. Насколько я понял, каждая инструкция имеет общую структуру, и я типа должен как то понять по первому байту что это за инструкция. Тут у меня несколько вопросов.
0. Не проебался ли я где то в рассуждениях выше? Ничего не пропустил и ничего не переусложнил?
1. Я поискал различные списки инструкций x86 и охуел от всяких расширений типа FPU, SIMD, MMX, SSE1/2/3/4. У них там какие то свои стеки, свои регистры, охуеть. Я как бы вообще не реверсер, но те несколько раз, что я расчехлял иду и олли, я никогда не видел всех этих st(0) FPOPA MMX и всего прочего. Из того, что я прочитал об
этих расширениях мне показалось, что это всё как бы виртуальная хуйня, которая всё равно в конечном счете преобразуется в голый классический x86 с его классическими ADD EAX EBX. Это так?
2. Можете посоветовать годных и максимально современных гайдов по написанию дизассемблера, где были бы приведены в коде структуры инструкции, процесс парсинга и всё такое? Всё, что я находил, там просто в общих чертах говорилось о структуре команды и всё такое, но никакой прям особой конкретики и подводных камней, которые мне кажется должны быть.
178 1170331
>>170282

>. Это так?


Нет. Просто векторизация непростая штука, автоматически компиляторы оче редко ее могут сами применить, а интринсиками кодить то еще удовольствие. Их применяют в числодробильне и графике дабы выжать производительность, с повсеместным расппостранением gpu это почти потеряло актуальность,потому да, встретить можно редко и только в специфичном по. Декомпильни какой-нибудь opencv, скажем, там 100% есть sse.
# OP 179 1170337
>>170282

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


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

>Насколько я понял, каждая инструкция имеет общую структуру, и я типа должен как то понять по первому байту что это за инструкция.


Если не применяются антиотладочные приёмы, то да.

>никогда не видел всех этих st(0) FPOPA MMX и всего прочего.


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

>где были бы приведены в коде структуры инструкции, процесс парсинга и всё такое?


В шапке по ссылке https://software.intel.com/en-us/articles/intel-sdm гайды от интела, лучще него тебе никто не опишет. Но там тыщи страниц, ты охуеешь всё это читать.

АЛСО, я ОП-долбоёб, думаю скоро придёт сажа-кун и пояснит конкретно.
sage 180 1170380
>>170282
1) Автоматическое дизассемблирование произвольного кода невозможно. Ну то есть вообще, никак. Можно пытаться решать частные задачи: ограничиться каким-то набором компиляторов, закладываться на отсутствие кода, написанного вручную на ассемблере и/или сгенерированного протектором и т.д., но это нетривиально даже при условии использования какого-нибудь capstone, который разберет инструкции за тебя.
2) Зачем тебе добавлять импорт именно к существующему дескриптору? Все отлично работает, если добавить новый дескриптор (это нормально, существуют exe, собранные стоковыми тулсетами, в которых есть несколько дескрипторов для одной DLL).
3) Если тебе нужен не произвольный PE, а более-менее современный, то у них всех есть релоки, по релокам можно находить ссылки на IAT, что позволяет делать с IAT что угодно, с большой вероятностью ничего не сломав (если что-то ссылается на thunk, ты можешь это что-то поправить, не разбирая даже саму инструкцию).

> вставить свой код в уже существующий


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

> где были бы приведены в коде структуры инструкции, процесс парсинга


Intel SDM уже посоветовали. Конкретно второй том, первые главы (instruction format) и Appendix A с бесконечными табличками инструкций. Как ты это парсить будешь - дело твое. Можно табличками и масочками, можно длинным свитчем и масочками. Это самая меньшая проблема.

Алсо, посмотри на готовые инструменты типа Intel PIN, DynamoRIO и т. д. Может, тебе и не нужно все это велосипедить? Но за динамическое инструментирование приходится платить производительностью - на некоторых алгоритмах ты вообще ничего не заметишь, но зато на других будешь сосать довольно сильно.

>>170331
Собираешь любой код с -m64, и вычисления с плавающей точкой будут на SSE, ибо FPU давно уже легаси. В 32-битном коде тоже можно (-mfpmath=sse), но из-за ABI оно не используется по умолчанию даже если сказать -msseX.

>>170337
Да мне добавить в общем-то нечего. Просто я сначала ответил, а потом увидел, что ты уже отписался.
sage 180 1170380
>>170282
1) Автоматическое дизассемблирование произвольного кода невозможно. Ну то есть вообще, никак. Можно пытаться решать частные задачи: ограничиться каким-то набором компиляторов, закладываться на отсутствие кода, написанного вручную на ассемблере и/или сгенерированного протектором и т.д., но это нетривиально даже при условии использования какого-нибудь capstone, который разберет инструкции за тебя.
2) Зачем тебе добавлять импорт именно к существующему дескриптору? Все отлично работает, если добавить новый дескриптор (это нормально, существуют exe, собранные стоковыми тулсетами, в которых есть несколько дескрипторов для одной DLL).
3) Если тебе нужен не произвольный PE, а более-менее современный, то у них всех есть релоки, по релокам можно находить ссылки на IAT, что позволяет делать с IAT что угодно, с большой вероятностью ничего не сломав (если что-то ссылается на thunk, ты можешь это что-то поправить, не разбирая даже саму инструкцию).

> вставить свой код в уже существующий


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

> где были бы приведены в коде структуры инструкции, процесс парсинга


Intel SDM уже посоветовали. Конкретно второй том, первые главы (instruction format) и Appendix A с бесконечными табличками инструкций. Как ты это парсить будешь - дело твое. Можно табличками и масочками, можно длинным свитчем и масочками. Это самая меньшая проблема.

Алсо, посмотри на готовые инструменты типа Intel PIN, DynamoRIO и т. д. Может, тебе и не нужно все это велосипедить? Но за динамическое инструментирование приходится платить производительностью - на некоторых алгоритмах ты вообще ничего не заметишь, но зато на других будешь сосать довольно сильно.

>>170331
Собираешь любой код с -m64, и вычисления с плавающей точкой будут на SSE, ибо FPU давно уже легаси. В 32-битном коде тоже можно (-mfpmath=sse), но из-за ABI оно не используется по умолчанию даже если сказать -msseX.

>>170337
Да мне добавить в общем-то нечего. Просто я сначала ответил, а потом увидел, что ты уже отписался.
181 1170418
>>170380

> ограничиться каким-то набором компиляторов


А это как влияет на сырые байты? Какая мне разница, кто транслировал код и с какого языка, если в итоге он всё равно биективно отображаем в ассемблерный листинг. Или я чего то не знаю о современных компиляторах? У меня ведь задача не восстановить точно было ли i = i+1 или i++.

>Зачем тебе добавлять импорт именно к существующему дескриптору?


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

>Может, тебе и не нужно все это велосипедить?


Да, в идеале бы этого избежать. Сейчас смотрю на capstone, посмотрю еще на интел пин и динаморио. Мне бы в идеале какую нибудь C/C++ либу дизассемблирования с исходниками, чтобы я мог .lib себе собрать и из нее дергать нужный функционал.

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


Ну да, но при этом мне нужно либо пихать свой детур в хвост секции либо создавать новую, если в текущей места нет, но мне вот в идеале нужно инжектить где то внутри исполняемого кода, чтобы всё выглядело монолитно. И про дизассемблер длин почитал. Окей, а эту штуку как написать? Я так понимаю, мне так же придется считывать первые байты инструкций и по какой нибудь таблице определять длину? На вики/краклаб вики написано, что процессоры тоже определяют длину команды как то. Как такое вообще блять гуглить?

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


Вот тут не понял к чему ты это. Пока пытался понять, задался следующим вопросом: Раз загрузчик может загрузить либу по любому адресу, все импорты обкладываются релокациями? А если я уберу dynamic base из nt optional header и обнулю data directory relocbase, и при этом в импорте будут либы с одним и тем же image base, то загрузчик жидко пёрднет и умрёт?. Ты предлагаешь вешать хук на вызов импортируемой функции? Типа по релокам и IAT я нахожу, что в таком то месте executable секции идет вызов импортируемой функции, и вот тут я меняю адрес call на свой хук, там делаю что мне надо, восстанавливаю стек и регистры и
вызываю импортируемую функцию, а затем ret?
181 1170418
>>170380

> ограничиться каким-то набором компиляторов


А это как влияет на сырые байты? Какая мне разница, кто транслировал код и с какого языка, если в итоге он всё равно биективно отображаем в ассемблерный листинг. Или я чего то не знаю о современных компиляторах? У меня ведь задача не восстановить точно было ли i = i+1 или i++.

>Зачем тебе добавлять импорт именно к существующему дескриптору?


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

>Может, тебе и не нужно все это велосипедить?


Да, в идеале бы этого избежать. Сейчас смотрю на capstone, посмотрю еще на интел пин и динаморио. Мне бы в идеале какую нибудь C/C++ либу дизассемблирования с исходниками, чтобы я мог .lib себе собрать и из нее дергать нужный функционал.

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


Ну да, но при этом мне нужно либо пихать свой детур в хвост секции либо создавать новую, если в текущей места нет, но мне вот в идеале нужно инжектить где то внутри исполняемого кода, чтобы всё выглядело монолитно. И про дизассемблер длин почитал. Окей, а эту штуку как написать? Я так понимаю, мне так же придется считывать первые байты инструкций и по какой нибудь таблице определять длину? На вики/краклаб вики написано, что процессоры тоже определяют длину команды как то. Как такое вообще блять гуглить?

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


Вот тут не понял к чему ты это. Пока пытался понять, задался следующим вопросом: Раз загрузчик может загрузить либу по любому адресу, все импорты обкладываются релокациями? А если я уберу dynamic base из nt optional header и обнулю data directory relocbase, и при этом в импорте будут либы с одним и тем же image base, то загрузчик жидко пёрднет и умрёт?. Ты предлагаешь вешать хук на вызов импортируемой функции? Типа по релокам и IAT я нахожу, что в таком то месте executable секции идет вызов импортируемой функции, и вот тут я меняю адрес call на свой хук, там делаю что мне надо, восстанавливаю стек и регистры и
вызываю импортируемую функцию, а затем ret?
182 1170456
>>170380

>вычисления с плавающей точкой будут на SSE


Нуок, но это всё-таки милипиздрическая часть SSE, по сути только арифметика и только плавающей точки, и та в формате "movsd - mulsd - movsd", т.е. несколько инструкций из сотни.
sage 183 1170459
>>170418

> Какая мне разница, кто транслировал код и с какого языка


Имея ограничания, ты можешь делать предположения. Что вот эту последовательность инструкций можно не разбирать, а брать как блок с известной функциональностью (всякие вещи, связанные с обработкой исключений или шаблонный код _initterm). Что какие-то вещи компилятор делать не будет (например, применительно к задаче про импорты, не станет делать position-independent code, или хотя бы не станет адресовать импорты таким способом). Что если данные ближе к началу RW секции - то для такого-то компилятора они на самом деле константа (например, таблица виртуальных функций).

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


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

> Окей, а эту штуку как написать?


Блять, формат инструкций в Intel SDM прочитай. Будет у тебя табличка опкодов с длинами, а ModR/M будешь разгребать по ходу дела. В 64-битном коде все чуть веселее из-за REX. Если сложно, то на васме было "Заклинание кода", оно гуглится, правда оно только для 32 бит. Алсо, есть упоротый и гарантированно работающий способ, для которого нужно строк 30 кода от силы гугли page fault isa analysis, но он неебически медленный и поэтому почти непригоден для практического применения.

> Пока пытался понять, задался следующим вопросом: Раз загрузчик может загрузить либу по любому адресу, все импорты обкладываются релокациями?


Да, потому что ты на импорты ссылаешься как на данные (грубо говоря, в 32-битном коде call [imported_func] или jmp [imported_func] читают дворд по абсолютному адресу, а значит на адрес дворда нужен релок).

> и при этом в импорте будут либы с одним и тем же image base, то загрузчик жидко пёрднет и умрёт?


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

> Ты предлагаешь вешать хук на вызов импортируемой функции?


Я предлагаю пройтись по релокам и посмотреть, не ведут ли адреса в IAT. Если ведут - запатчить новым адресом нужного элемента в IAT (если ты их, допустим, раздвинул, чтобы свое говно воткнуть). Это нормальный, стандартный подход, и для нормальных стандартных exe, сделанных нормальными компиляторами (см. выше), а не протекторами, он работает уже третье десятилетие. Но можно и подменять вызовы импортов на свои, как ты описал.

> C/C++ либу дизассемблирования с исходниками


Так capstone. И с исходниками, и поддержка любой архитектуры, которая может тебе присниться в страшном сне, и сборка лайт-версии только с нужной функциональностью.

Алсо, сдается мне, что ты малварку пилишь. Шел бы ты нахуй отсюда в таком случае.
sage 183 1170459
>>170418

> Какая мне разница, кто транслировал код и с какого языка


Имея ограничания, ты можешь делать предположения. Что вот эту последовательность инструкций можно не разбирать, а брать как блок с известной функциональностью (всякие вещи, связанные с обработкой исключений или шаблонный код _initterm). Что какие-то вещи компилятор делать не будет (например, применительно к задаче про импорты, не станет делать position-independent code, или хотя бы не станет адресовать импорты таким способом). Что если данные ближе к началу RW секции - то для такого-то компилятора они на самом деле константа (например, таблица виртуальных функций).

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


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

> Окей, а эту штуку как написать?


Блять, формат инструкций в Intel SDM прочитай. Будет у тебя табличка опкодов с длинами, а ModR/M будешь разгребать по ходу дела. В 64-битном коде все чуть веселее из-за REX. Если сложно, то на васме было "Заклинание кода", оно гуглится, правда оно только для 32 бит. Алсо, есть упоротый и гарантированно работающий способ, для которого нужно строк 30 кода от силы гугли page fault isa analysis, но он неебически медленный и поэтому почти непригоден для практического применения.

> Пока пытался понять, задался следующим вопросом: Раз загрузчик может загрузить либу по любому адресу, все импорты обкладываются релокациями?


Да, потому что ты на импорты ссылаешься как на данные (грубо говоря, в 32-битном коде call [imported_func] или jmp [imported_func] читают дворд по абсолютному адресу, а значит на адрес дворда нужен релок).

> и при этом в импорте будут либы с одним и тем же image base, то загрузчик жидко пёрднет и умрёт?


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

> Ты предлагаешь вешать хук на вызов импортируемой функции?


Я предлагаю пройтись по релокам и посмотреть, не ведут ли адреса в IAT. Если ведут - запатчить новым адресом нужного элемента в IAT (если ты их, допустим, раздвинул, чтобы свое говно воткнуть). Это нормальный, стандартный подход, и для нормальных стандартных exe, сделанных нормальными компиляторами (см. выше), а не протекторами, он работает уже третье десятилетие. Но можно и подменять вызовы импортов на свои, как ты описал.

> C/C++ либу дизассемблирования с исходниками


Так capstone. И с исходниками, и поддержка любой архитектуры, которая может тебе присниться в страшном сне, и сборка лайт-версии только с нужной функциональностью.

Алсо, сдается мне, что ты малварку пилишь. Шел бы ты нахуй отсюда в таком случае.
184 1170654
>>170380

>понадобится дизассемблер длин как минимум


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

Очень интересная информация.
185 1170655
>>170380

>можно длинным свитчем


Карта указателей на функции?
186 1170658
>>170418

>Как такое вообще блять гуглить?


Жизненно.
187 1170859
>>170459

>Алсо, сдается мне, что ты малварку пилишь. Шел бы ты нахуй отсюда в таком случае.


Нет, я пишу пытаюсь протектор в рамках курсовой/дипломной работы. Отсюда условия на инжектинг не в новую секцию или хвост какой нибудь, а размазать по всему коду. Отсюда же гарантии, что PE не будет упакован и обмазан другими протекторами.
sage 188 1170879
>>170859

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


Побуду кэпом: защищать готовый исполняемый файл - скучно и бесполезно. Не думал взять LLVM IR и протектить его? Или хотя бы написать протектор-компоновщик для объектников? Можно попросить компилятор сделать -ffunction-sections/-Gy и тем самым значительно упростить себе жизнь.
189 1171701
190 1172489
кто-нибудь программировал на 6502? я пока копаюсь в з80, но так со стороны смотря, это же как вилкой чистить сортир, что там программировать то?

может кто пояснить за, как я понял, все аргументы в инструкциях могут иметь разный тип (регистров общего назначения нет), но я не очень догнал что там да как.
191 1173893
>>170459

>Алсо, сдается мне, что ты малварку пилишь. Шел бы ты нахуй отсюда в таком случае.


Авер в треде? Ну будет тебе, милый
192 1174141
А что по поводу работы в этой сфере? Выше прочитал что без опыта почти нереально что то найти, так ли это?
193 1174297
>>173893
Обычные пользователи, аверам наоборот выгодны вирусы.
>>174141
С опытом тоже, реверсеры нахуй не нужны, кроме 3,5 мест.
iN39PlEs6o.jpg556 Кб, 1613x2160
194 1174613
>>174297

>Обычные пользователи, аверам наоборот выгодны вирусы.


Аверам вирусы сами не нужны, им нужен шум вокруг них. Сами семплы они ненавидят, ибо это адский поверсшел/вбс/джс. Типичному аверу никогда не доверят серьезный анализ, за них это делает, как правило, чел из другой конторы, который по договоренности оказывает свои услуги ав конторе, в которой он сам не работает и никогда не согласится работать.
195 1174638
>>174613
Это же антивирус Кашпировского? От которого можно воду в банках заряжать?
196 1174662
>>174638
ага http://avksdie.narod.ru/
кст чел, что пикчу кидал - жутко хуесосил эту контору, говорил, что сам из команды исследования сложных угроз
197 1175091
Анон, а что почитать до RE4B?
Потому что я начал и уже начинаю плавать в понятиях и мало что понимать. Где там по хардкору про регистры, стеки и проч. Танненбаума читал года 4 назад, немного знаю Си. Нужно что-то покороче. Книга по какому-нибудь AT&T асму пойдёт?
sage 198 1175143
>>175091
Хуй знает, там все вроде доступно. Можешь тут спрашивать что-нибудь конкретное, мы поясним. AT&T не нужен, это лучший способ запутаться.
199 1175639
>>175091
Калашникова
Поймешь основы
200 1176346
Что в виндах находится в памяти процесса до image base? Сейчас наткнулся на TEB и PEB под FS, который гораздо раньше IB. Чё там еще интересного есть?
201 1176414
>>176346

> Что в виндах находится в памяти процесса до image base


А вы запустите отладчик и посмотрите memory map, так будет лучше с точки зрения практического обучения
Вся память делится на регионы, которые состоят из страниц с одинаковыми атрибутами доступа. Выше / ниже модуля находятся другие модули, паддинги и тд
202 1176779
Репост из ньюфаг-треда:

Как прицепить отладчик к программе, которая через системный шелл вызывается в другой программе? Пока ничего кроме int 3h на OEP не придумал. Может, есть что-то элегантнее?
sage 203 1176875
>>176779
Создаешь ключик HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\Program.exe. Втыкаешь туда значение типа REG_SZ Debugger="путь к отладчику (с опциями, если нужно)". После этого каким бы образом ты не запускал программу, она будет попадать в указанный отладчик. Достаточно элегантно? То же самое делается мышкой через gflags.exe из Debug Tools for Windows, вкладка Image File.
204 1176878
>>176875
Максимально элегантно в моем случае. Спасибо! Все подобрать кейворды к Гуглу не мог.

И не OEP, а просто EP, конечно. Сами понимаете, откуда такая деформация.
205 1176881
>>176875
>>176878
Там, вроде, Debug Tools от Windows 7 и выше. Не знаешь, часом, че там для XP виртуалка для всех интересных дел?

Или даже нахер это все, мне через реестр проще.
Вот это вот «Program.exe» указывать абсолютным путем или хватит просто названия исполняемого файла? Экзешник в PATH (или как это на Windows называется? Короче, из cmd запускается просто как file.exe).
206 1176948
>>176779
Бряку на CreatePeocess и ставь флаг CREATE_SUSPENDED
207 1176949
>>176948
А если ShellExecute?
208 1176966
Как мне в ollydbg отследить обработку текста, введенного в поле ключа? То, что нашел в интернете - это например делать условный ВР с проверкой на хэндл моего текстового окна на вызов GetWindowTextA/W из user32.dll. Но только чё то бряки не триггерятся. Я тут еще подумал, раз я ввёл тот или иной текст, он должен быть в памяти процесса. Как мне поставить условный БП на чтение памяти, если в ней такая то строка?
209 1176969
>>176966
На чем написано приложение?

> Как мне поставить условный БП на чтение памяти, если в ней такая то строка?


Никак.
210 1176971
>>176969
Если верить PEiD, то msvc++ 6.0. Я параллельно читаю книгу Касперски искусство дизассемблирования и наткнулся на утверждение, что ввод в общем то могут на каждый WM_KEYDOWN/WM_KEYUP шифровать и как таковой у меня целиком строки в памяти и не будет
sage 211 1176989
>>176881

> абсолютным путем или хватит просто названия


Насколько я помню, работает и так, и так. Сам пишу просто имя, потому что писать быстрее.

> Не знаешь, часом, че там для XP


https://transfer.sh/Hr2Op/Debugging Tools for Windows (PSDK 2003 R2).msi если доверяешь или качни Platform SDK от 2003, из которого они взяты.

>>176966

> отследить обработку текста, введенного в поле ключа


Может там кастомный обработчик WM_GETTEXT? Может там GetDlgItemText?

> Как мне поставить условный БП на чтение памяти


Зависит от отладчика. Можешь поставить условный брейкпоинт, ловить его скриптом/плагином, проверять на наличие строки и продолжать дальше, если строки нет.
212 1177352
>>176949

>ShellExecute


Дядя, а ты не знал, что она является оберткой над CreateProcess, которая в свою очередь вызывает RtlCreateUserProcess, а та - NtCreateProcess
sage 213 1177481
>>177352
Ты предлагаешь ему написать что-то, что поставит system-wide бряк на CreateProcess? И ты считаешь, что это проще, чем прописывание int3 по EP целевого бинаря, я правильно понял?
214 1177595
Почаны, сильно не бейте. Я дикая ньюфажина. Вкатываюсь в годноту потихоньку. Сижу с дебиана x86_64
Почему оно сегфолтится, хоть и пишет в вывод hello?
.section .data
foo:
.string "hello"
.set foo_length, . - foo -1
.section .text
.globl _start
_start:
mov $1, %rax
mov $1, %rdi
mov $foo_length, %rdx
mov $foo, %rsi
syscall
Избейте ссаными тряпками, но плохо пока что понимание даётся. Мне бы на пальцах всё объяснить. Можно и на среднем.
seg.png23 Кб, 369x607
215 1177606
>>177595

>сегфолтится


вот мне тоже интересно, хотя у меня прост руки не оттуда растут небось
мимо другой ньюфак
216 1177619
>>177595
Может ты строку не терминировал
Screenshot1.png6 Кб, 295x123
217 1177645
Не запускается IDA, вот что появляется при запуске.
Как исправить?
218 1177661
>>176346
А есть годная статья по PEB,TEB PS ? ЧТо это такое и нахуй это надо
219 1177893
>>177595
Сегфолтится, потому что после вывода строки продолжает выполнять содержимое памяти, потому что завершить программу или хотя бы зациклить ее ты забыл.

>>177645
Вернул мне мой 2005й (но хуй вспомню, как фиксилось). Купи иду поновее (это в пятерке же?), включи английскую раскладку клавиатуры по умолчанию.

>>177661

> нахуй это надо


Если не знаешь, то и нахуй не надо. В TEB лежат данные потока, в PEB данные процесса. В TEB чаще всего ебут TIB, в котором лежат обработчики исключений, ну и TLS еще. В PEB самое нужное - база данных лоадера исполняемых модулей - можно писать свои загрузчики в обход системного или свои движки импорта, ну и т. д. Более-менее годная статья называется "исходники двухтысячной винды или wrk", что-то можно у Руссиновича в книге почерпнуть (там целая ебаная глава!).
220 1177903
>>177606
>>177893
Огромная благодарность, аноны. Благодаря сну, вашим наставлениям и свежему взгляду всё заработало и перестало сегфоултится. И впрямь, нужно было просто вызвать sys_exit. Ооо... Это потрясающее чувство, когда всё компилируется, как надо. Благодарю. Продолжу вникать в удивительный мир ассемблеров.
221 1177918
Как писать базонезависимый код на C/C++? Не просто чтоб релокаций не было, а чтобы образ мог загрузиться по любому адресу, но перемещаемых элементов бы в нем не было? Чего нужно избегать и чего нужно придерживаться? Данных нет, либо они в стеке. Импортируемых функций тоже нет.
seg.png25 Кб, 362x573
222 1177999
>>177903
неистово мультиплицирую
223 1178069
>>177918
Базонезависимость как таковая не нужна. Хотя труда большого это не составит: обычно компилятор использует jmp/call near, те нашу дельту по сути. Таким образом остается отбиться от обращений по конкретным адресам, ну и по мелочи пофиксить.
224 1179501
Господи, как обидно. Проебал все скиллы (последний раз в Иде плотно сидел лет пять назад, когда последний год школьником был), не могу алгоритм генерации ключа даже тупо найти в бинарнике на 700 КБ. Да даже если бы и нашел, вряд ли бы смог что-то сделать, очень уж глубоко заново погружаться в это надо будет. Всем добра в треде.
225 1179513
>>179501
Я хочу целиком отреверсить группу экзешников суммарно примерно 700 кб как раз. До сих пор не взялся.
226 1182100
>>179513
700 кб прилично, особенно, если математика есть, начни с чего попроще
227 1183605
>>182100
Слишком дохуя, а откуда начинать - не совсем ясно.
То есть, если я ловлю какой-то интересующий меян кусочек брейкпоинтом, то с поправкой на ветер понимаю, что происходит, что вычисляется. А общая картина с кучей сисколов и хардварных обращений всё равно от меня уходит.
228 1184432
>>126092 (OP)

> ASM & Reverse engineering


А за это вообще платят? Работу реально найти?
229 1184609
>>184432
Нет, и не мечтай.
230 1185095
Есть ли годные статьи про то, как писать загрузчики?
231 1185105
>>185095
Почитай, как написать MBR-локер
232 1185108
Кстати, это еще актуально?

CreateFile('\\.\PhysicalDrive0',GENERIC_WRITE,FILE_SHARE_WRITE,0,OPEN_EXISTING,0,0);
233 1185110
>>185108
Запись в MBR-раздел не требует повышения привилегий?
234 1185125
>>185105
Окей, спасибо. А какими ассемблерами вы тут пользуетесь?
235 1185134
>>185110
Можно скинуть нужный EXEшник в папку system32, переименовать в sethc.exe этлт файл, сэмулировать нажатие 4 раз шифта и все.
236 1185150
>>185134
Без прав админа в system32 писать не дадут.
237 1185152
>>177999
Мог бы обратиться к данным через дельта-смещение для большей труевости.
238 1185166
>>185150
Тогда может вписать в системный процесс вроде explorer.exe?
239 1185236
>>185166
Просто берёшь и запускаешь от админа. А если ты пишешь вирус, то шёл бы ты нахуй отсюда.
240 1185264
>>185236
Не пишу, но что в этом плохого? Это в познавательных целях полезно же.
241 1185343
>>185264
В познавательных докапывайся до всего сам.
242 1185634
>>185343
А ты познавательно иди нахуй, выродок.
243 1186360
Засунуть переменную в стек можно только из регистра?
sage 244 1186489
>>186360
Нет, можно из памяти или даже из самого стека.
push dword[0x12345678]
push dword[eax]
push dword[esp+0x08]
И даже:
sub esp, 4
mov dword [esp], 0xdeadbeef
И даже:
sub esp,0x100
mov eax,esp
invoke memcpy,eax,somedata,0x100
245 1186566
>>185236

> А если ты пишешь вирус, то шёл бы ты нахуй отсюда.


Ты че, еба? Петушок из ав энтерпрайза?
246 1186657
>>186566
Согласен. Вирусы - это стиль.
sage 247 1186711
>>186566
Да он питуз. Если система предоставляет возможности для унижения юзверей, почему бы этим не воспользоваться? Если посреди поля ты найдешь тысячу рублей, ты заберешь ее себе или отнесешь в милицию?
248 1186747
>>186711
>>186657
Сразу видно, что вы зелень. Малваре == мани. Ни больше, ни меньше. Лично я блэком не занимаюсь, но мне понятно мышление коллег по цеху. Те, что кричат что-то про идеологию версусов - идиоты. Сейчас все высокие поделки делаются исключительно за деньги и исключительно таргетированно.
249 1186751
>>186747

>Малваре == мани


Уже давно это так, согласен.
Те времена прошли и забылись.
Печаль.
250 1186753
>>186747
кст стоит добавить, что создание верусов крайне развивает твой скилл, ибо это так или иначе андоки и внутренности
// пс, любой не пес в ав конторе имеет блэк бэкенд. Пруфы затеряны в анналах архивов некоторых сайтиков нулевых годов.
251 1186861
>>186566
Я обычный пользователь, которому даром не нужны ни вирусы, ни антивирусы, базы которых из-за вирусописателей бесконечно пухнут.
252 1187251
>>126092 (OP)
Можно ли проект писаный на делфи билдере вернуть в делфи билдер?
253 1187531
>>187251
лол
sage 254 1187907
>>187531
Так ведь можно. IDA/IDR, от месяца до полугода жизни, и все вернется в исходники своя.
255 1188182
>>187907
Я просто с постановки вопроса охуел.
256 1188363
>>187907
Но почему так долго и почему руками?!
Ведь это не шифрование. Это перевод с одного языка на другой. Сложные команды в простые. Почему нет автоматического переводчика из простых команд в сложные? К тому же - есть куча разработок периода 98-10, которые никто повторять не собирается, но они нужны на индастриале как воздух. Неужели никто не заинтересован в создании универсального вскрывателя да хотя бы для того же борланда. ТАм же тьма тьмущая проектов писано.
257 1188368
>>188363
Было такое, для вижуал васика делали, ну и где сейчас те поделки? Упростив копание в говне мамонта, ты отнимаешь краюху хлеба у мяса из бодишопа. А так - да, технологии позволяют так восстановить исходник, что он после компиляции байт в байт совпадёт. Но это нужно садиться и год дрочить разные версии билдеров-хуилдеров. Тем, кто осилит декомпиляцию, этот сизифов труд неинтересен.
258 1188370
>>188368
>>188363
Врываюсь в тред и ссу вам на лица. Компиляция необратима. И точка. Вы просто совсем блядь зелень.
Это как по хэшу искать искомую строку (ну почти, у мну есть пример лучше, но вы его не поймете).
259 1188372
>>188370
Автоматика существует, есть годные энтерпрайз двиги, которые неплохо сворачивают весь мусор, но однозначно получить исходники незя, это вам не шарп
260 1188374
>>188370
Просто ты недозрел ещё до таких дел, ну так это пройдёт, как и твой энурез с влажными фантазиями. В начале 00х были полноценные декомпиляторы для васика и жавы - потому что сами компиляторы были таким дном, что можно было легко выявить дюжину шаблонов и конечным автоматом переводить байт-код обратно в сорцы. То, что у борланда выдаётся за оптимизатор, в гцц называется -O0, так что он от байт-кода недалеко ушел. Потеряется только всякая требуха типа имен и комментов, да и то не всегда, а когда нет отладочных символов. Алгоритмы в своё время вытаскивались на раз.
sage 261 1188421
>>188368

> для вижуал васика делали


Никуда не делось: vb-decompiler.org Но оно далеко не все восстанавливает, и это не всегда читабельно, и это для Visual Basic, который на каждый чих дергает рантайм.

>>188370
Двачую этого. Только не совсем так: компиляция в общем случае необратима. Есть частные случаи, и для них есть решения от совсем ручных до полуавтоматических. И да, можно сравнить с поиском прообраза хэша: так же, как тебя устроит любая коллизия, тебе не нужен изначальный код, тебя устроит любой код, который будет давать то же наблюдаемое поведение. Но все равно все очень плохо.

>>188372

> есть годные энтерпрайз двиги


Ой, надеюсь, ты не про авастовское говно, которое они тут недавно зарелизили?

>>188374

> Алгоритмы в своё время вытаскивались на раз.


Они и сейчас вытаскиваются. Проблема в том, что сейчас все чаще нужны не алгоримты, а, допустим, подробная документация по взаимодействию с железкой, когда на входе у тебя только даташит со шлаком от маркетологов и ебаный бинарь размером метров 40. А внутри китайцы в очередной раз изобрели ОС.
262 1189312
В WinAPI есть какой нибудь макрос для маппинга поля characteristics у IMAGE_SECTION_HEADER к параметру защиты страницы flProtect, который передается в VirtualProtect? А то чё то у характеристики возможна комбинация нескольких значений, а в page protection только один можно выбрать. Лень пилить 24 if'а
263 1189339
>>189312
Макроса нет, сделай табличку. Там 3 ебаных бита, 8 комбинаций, руки не отвалятся.
264 1189392
>>189339
А что делать с IMAGE_SCN_MEM_SHARED?
265 1189401
>>189392
Оно работает через такую жопу, что проще игнорировать его, чем заставить работать нормально в современной ОС с ASLR, даже еще и с кастомным загрузчиком PE, который ты, видимо, пилишь.
266 1190170
Что почитать не сильно длинно, чтоб писать на x86? Накатил nasm, написал hello world по примеру, но структурированных знаний не хватает, то у меня стек miss-aligned, то ещё что-то.
image.png885 Кб, 1920x1200
267 1190218
Всем привет, вопрос про написание простейшего драйвера для винды.
Мне по учебе в вузике нужно написать драйвер для Windows, который будете иметь возможность:
1) получать/отправлять значение от консольного приложения в user mode
2) записывать/считывать значение в MSR регистры процессора

Для Линукс написание такого драйвера (модуля ядра) проблем у меня не вызвало. С Windows всё сложнее, не могу разобраться в сэмплах на сайте майкрософта, книги по драйверописанию уже устарели.

Короче, спасите, умираю.
Посоветуйте инфы, чтобы разобраться.
А ещё лучше, напишите драйвер за меня (у шарящего человека это и 30 минут не займет), а я 1500р перешлю за работу на карту.
Или посоветуйте, где за деньги можно попросить такое сделать, потому что на Workzilla и Fl.ru за 1500 рублей никто не нашёлся
268 1190745
>>190218
1) DeviceIoControl из юзермода. В кернелмоде DriverEntry + обработчики irp. Вот простенький курс blagin.ru/sozdanie-drajverov-chast-4-obmen-dannymi/
2) RDMSR/WRMSR + интел мануал
269 1190746
>>190218
А че за вузик если не секрет? Какая кафедра/факультет, какой курс
// не товарищ майор, интересуюсь, где же в наш 2к18 с досом не работают, а все же пилят че-то более менее
270 1190747
>>190170
на васме есть все (wasm.in)
sage 271 1190770
>>190747
.in - это уже не васм.
272 1191150
Анончики, а есть ли какие-нибудь гуиды по реверсу железок?Я имею ввиду совсем для даунов , хотя бы ориентиры что знать, типо схемотеники
273 1191183
>>191150
Посмотри выступления с конфочек, и будешь примерно представлять, что читать. Типа такого: https://www.youtube.com/watch?v=fWqBmmPQP40
274 1191191
подписался
275 1191537
Пишу на ассемблере и С, в заголовочном файле declared функции, там же есть структура с указателями на эти функции (в различных комбинациях). Предполагается, что пользователь будет обращаться к некоторой структуре, которая будет вызывать нужные функции по "правильным" для пользователя указателям (могут быть разные варианты "одной и той же на вид" функции). Но при этом ему ничего не мешает просто дергать все эти функции, минуя мою инкапсуляцию. Если их сделать static, то компилятор ожидает дефайны и сыплет ворнингами, а дефайнов нет, так как асм компилится в отдельный объектник.
276 1191553
>>191537
Извините, промахнулся тредом.
277 1191566
Кто может написать trainer для простенькой игры на Дельфи-5?
278 1191583
Антоны, допустим я патч сделал и мне нужен патчер для дистрибьюта, помню юзал какой-то де факто стандартный, но забыл название, подскажите.
patchers.png197 Кб, 787x2991
279 1191713
>>191566
Все могут.

>>191583
Их тысячи.
280 1191753
>>191713
у меня не получалось понять как хранятся данные. банальным АртМани нужное значение получить не удалось. Спать не мог одно время, как оно меня бесило
281 1191755
>>191753
Так тащи игру-то.
282 1191758
>>191755
rgho.st/7l78Gr8Mm

спасибо, я думал хуями обложат как это принято
283 1191774
>>191758
Еще не поздно.
284 1191780
>>191713
О, спасибо
sage 285 1191807
>>191758
Деньги (и, вроде бы, цены тоже) в 64-битных интах, в сотых долях копеек (т.е., в 10000-х долях того, что отображается): наличных 1234 -> 1234 * 10000 -> 12340000 -> 0000000000bc4b20 -> 20 4b bc 00 00 00 00 00. Ковыряться лень, игру не осилил, сложно.
286 1191812
>>191807
деньги не могу найти где
sage 287 1191816
>>191812
Я же тебе расписал специально. Умножаешь, переводишь хексы, хексы задом наперед (little endian у нас), байтики ищешь (в том же OllyDbg View->Memory, правой кнопкой, Search, байтики, Entire block, Case sensitive или прямо инт после умножения в каком-нибудь Cheat Engine). Судя по адресам, оно где-то в куче.
288 1191859
В 32-битном фасме, в строке edit получаю числа функцией GetDlgItemText, как их конвертировать в hex? Допустим пишу 46, они в памяти как 34 и 36, как сделать чтобы число 46 сохранялось в памяти как 0х46?
289 1191874
>>191816
там похоже что шифруется каким-то образом. не открыто лежит же
sage 290 1191890
>>191859
Готового ничего в Windows API нет, но можешь из msvcrt.dll дернуть strtol. Или парси вручую. Обнуляешь какой-нибудь регистр. Берешь очередную шестандцатеричную цифру, преобразуешь ее в 4-битное значение (0..15) из '0'..'9' в 0..9, а 'a'..'f' и 'A'..'F' в 10..15 (cmp, sub, можно xlat и табличку). Если встретится не шестнадцатеричная цифра - обрабатываешь ошибку. Получив цифру, сдвигаешь свой регистр влево на 4 бита (shl) и кладешь в освободившиеся биты (or, add - похуй) свою цифру. Повторяешь, пока не кончится полученная строка или не встретится невалидный символ.

>>191874
Блять, а 64-битные числа и десятитысячные доли я, наверное, сам придумал. Все открыто лежит, просто не в тех единицах, что отображается. Более того, в каком-нибудь cheat engine с помощью поиска по increased/descreased ты бы и сам все это быстро нашел, ничего не зная и безо всяких IDR и отладчиков.
291 1191894
>>191890

>Готового ничего в Windows API нет


Спасибо, придётся вручную.
292 1191920
>>191890
нет, я искал и ни раз
293 1192046
WinAPI'шный LoadLibrary сам определяет системную .dll какой разрядности подгрузить при вызове? Вот например, компилируя под х86 я был уверен, что вызов LoadLibraryA("kernel32.dll") вернет мне хэндл на 32 разрядную либу, а если я компилируюсь под x64? LoadLibrary сам узнает какую версию мне надо? Могу ли я повлиять на версию, если вот вдруг мне захотелось 32 битный kernel32 в своём 64 битном процессе?
294 1192072
>>192046

За версию либы отвечает WOW64, который подгружает 32-битную библиотеку длоя 32 битных приложений.

> если вот вдруг мне захотелось 32 битный kernel32 в своём 64 битном процессе?



То однозначно лососнешь тунца.

32-битные либы к 64-битному приложению подключать нельзя.
295 1192471
>>192072

>32-битные либы к 64-битному приложению подключать нельзя.


вот тут вы не правы
по меньшей мере ручками можно впихнуть, затем свапаемся на x32 и погнали
296 1192515
>>192471

>затем свапаемся на x32 и погнали


Как ты себе это представляешь? Проц переключать может только ОС,указатели, структуры и прочую поеботу нужно конвертировать и так далее. Не знаю как в люнупсах, но винда проксирует только очевидные ядерные вызовы, все остальные либы тупо скомпилированы в двух версиях, и разделяют лишь ресурсы.
297 1192652
Я тут стаб для распаковщика PE по гайдам на C/C++ пишу, и у меня возник вопрос. Почему компилятор vc++ не генерирует релокации, если в коде есть вызовы функций? Насколько я понимаю, Вызов функции сопровождается тем, что в стек кладется адрес следующей инструкции EIP + адрес call' а с оператором?, на который в конце вызванной функции под RET'ом делается JMP. Тут ведь получается JMP по VA, а не RVA, а релоков нет. Я чёт не понимаю, или так бывает?
298 1192659
>>192652
EIP + размер call' а с оператором, епту.
самофикс
299 1192676
>>192652
Хотя чё то сам посидел подумал над своим вопросом. Раз адрес возврата в стеке, то без разницы, какой будет image base, так? Собсна поэтому и релокации не нужны для вызовов функций?
sage 300 1192686
>>192676
Адрес возврата в стек толкает процессор, он абсолютный адрес всегда знает. А релокации для jmp/call не нужны именно потому, что они ip-relative, а ip процессор опять же знает.
301 1194029
Есть структура с данными на сишечке, есть указатель на эту структуру. Указатель передается в функцию на асме, где я использую movdqa. Но происходит unaligned memory access и segfault. Приходится использовать movdqu, но это медленнее. Как быть?
302 1194035
>>194029
Сейчас перепроверил указатели, обнаружил 16-bit alignment. А мне нужно 32 для vmovdqa.
303 1194116
>>194029

>Как быть?


Гугли директивы своего компилятора если обьявляешь статически (__declspec(align(#)) у мокрософта/__attribute__((aligned(#))) на прыщах и шланге)/используй _mm_malloc с выравниванием, если выделяешь динамически.
304 1194144
>>194116

>__attribute__((aligned(#)))


Спасибо, работает. Насколько это плохо? Непортабельно же.
305 1194189
>>194144
C11, stdalign.h, alignas.
sage 306 1194190
>>194189
Ахда, и aligned_alloc, если выделяешь динамически.
307 1194206
>>194189
>>194190
Круто, спасибо.
308 1194451
>>159811
int 29h выводит символ из AL на экран (в текстмоде)

>>159683

>а вот как записать восьмеричное число не могу


Куда записать? Какой ебаквак писал этот код Куда проёбаны метки (loop)?
309 1194762
Что такое carry-less multiplcation?

Что там куда не переностися, если результат умножения двух 64-битных чисел всё равно 128 бит.
310 1197264
Сап, анон. Погугли за меня плес. И сильно не ругайся. Может ссылку правильную покажешь, где всё нормально объясняется. Я решительно не понимаю и не могу понять одну важную вещь на x86_64. Требуется подсчитать циферки в числе. Как работает div/idiv и заодно mul/imul не могу уловить. Вот у меня в rbx ложится 10, в rax, допустим, 47, в rdx 5. Делаю div rbx и вроде работает. В rdx остаётся 7. В rbx лежит 10, а вот в rax вообще какая-то дикая хрень получается. Дбгер каждый раз в rax показывает разные значения. Как работает div?
sage 311 1197293
>>197264
div с 64-битным регистром делит 128-битную пару rdx:rax на этот регистр, кладет частное в rax, остаток в rdx. Если частное не влезает в rax, происходит печалька. 0x5000000000000002f / 0x0a = 0x8000000000000004, остаток 0x07. Покажи скриншот отладчика. Уверен, что ничего не портишь после деления?
312 1197366
>>197293
Спасибо огромное, тебе. Помог разобраться. У меня ведь и впрямь до этого в rdx всякая хрень лежала. Ну, если грубо говоря, как на одном из пиков, где адын в rdx. Я отдельным модулём проверяю работоспособность, потом буду это вписывать в нужный код. Везде про какие-то расширения регистров пишут и сужения странные. А так нормально вроде. Сейчас сяду писать счётчик цифер. Спасибо, ещё раз.
sage 314 1198123
>>198102
Настоящий какер. А оно мигает? Оно обязательно должно мигать.
315 1198306
>>198123
Ты никогда Ольку что ли не видел, залетыш? Байткод, дизасм, регистры, стек, дамп памяти, ничего лишнего же. Пиздец, я натурально хуею с местной публики.
изображение.png151 Кб, 1920x1041
316 1198321
>>198102
это десктоп тред?
317 1198643
>>198102
>>198321
Накуя вам хекс-дампы? Вы же всё равно нихуя в них не поймёте.
318 1198680
>>198643
цы, стандартный интерфейс олли же. + помогает в отладке, чтобы проверить, что в памяти то, что должно быть.
sage 320 1198980
>>198720
Вот вроде и морду к радару прилепили, а он как был уебищным консольным говном, так и остался.
321 1198992
Хочу угореть по написанию ОС с нуля. То есть совсем, даже без опенсоусного ядра. Ни для чего конкретного, для общего развития просто пройти исторической дорогой эволюционирования ОС: загрузчик, шины, драйвера, файловая система, UI, и всё остальное необходимое. Мануалы уже накачал, остаётся вопрос по физической тестовой среде. В немногих обсуждениях по сабжу, которые я сумел найти, настойчиво упоминается Raspberry, но мне всё-таки хотелось бы на чём-нибудь Интеловском начать. И непременно всё на языке ассемблера.
Как я понимаю, если я захочу запилить исполняемый файл на машинном коде, не подходящий ни под одну широко распространённую операционную систему, мне придётся писать свой собственный ассемблер и ломать глаза об многотонные талмуды уровня "Intel® 64 and IA-32 Architectures Software Developer’s Manual"?
322 1198999
>>198980
Мне кстати гуй не нравиться, неудобный пиздец, ебучие макаки со своим qt, фрон тэед на gtk был лучше в сто раз, но он умер. Перекатился обратно в соснолечку, мне не привыкать
323 1199002
>>198992
Из ассемблеров бери fasm, на нем целая колибри и пара операционок подохлее написано. Талмуды от интела кстати неплохие, но только как справочники юзать. Их раньше даже в бумаге присылали совершенно бесплатно, но я при переезде проебал где то. А жаль, сейчас бы не отказался бумажную копию заиметь.
И вообще кури https://wiki.osdev.org/
324 1199015
>>199002

>https://wiki.osdev.org/


Вот за это вообще адовое спасибо. Не думал, что даже про такие основы могут быть какие-то вики.
Может и про электротехнические основы приёмо-передающих устройств есть своя вики? Типа, "как создать свою собственную амплитудно-частотную систему кодирования и разработать сигнальные созвездия с нуля"?
sage 325 1199142
>>198992

> настойчиво упоминается Raspberry, но мне всё-таки хотелось бы на чём-нибудь Интеловском начать


Не зря упоминается (хотя конкретно Raspberry - то еще днище с неполноценной документацией). Пол ARM bare-metal писать... ну не проще, но хотя бы логичнее, гораздо меньше всякого ненужного легаси из 80х.

> И непременно всё на языке ассемблера.


Категорически не рекомендую. Потратишь время на пердолинг в ассемблер вместо собственно создания ОС. А так, бутлоадер написал, обвязку всякую, для которой интринсиков нет, и вперед, хуячить на сишечке.
326 1199238
>>198992
Чё мелочиться с ОС? Ебашь сразу свой ИИ!
327 1199400
>>199238
Ну написать ОС, хоть и довольно примитивную реально, а вот ИИ нет.
хотя судя по его вопросам он не представляет размер трудностей
328 1199410
>>199142

>Пол ARM bare-metal писать... ну не проще, но хотя бы логичнее, гораздо меньше всякого ненужного легаси из 80х.



И то не сказал бы, бойлерплейт "запусти все режимы выполнения arm v8, чтобы и с гипервизором и с режимом "анальный огрод"" примерно такой же как real->protected->long выходит.
изображение.png18 Кб, 432x255
329 1199430
>>199142

Вот кстати, анончик, объясни мне, на OSdev читаю про "войти в long mode":

lea eax, [es:di + 0x1000] ; пихают адрес es:di +1000 будущей директории в запись PML4
or eax, PAGE_PRESENT | PAGE_WRITE ; хуярят туда же флаги для этой записи
mov [es:di], eax ; сохраняют запись

А потом поинтересовался какой же формат у этой записи, и вижу пикрелейтед.

Где видно что адрес располагается в битах с 11 по 31, а они просто его хуйнули без всяких сдвигов.

Это что за уличная магия такая? Или это little endian так работает, что mov 00000000, FFFF = FFFF0000?
330 1199471
>>199430

>Или это little endian так работает


Кажется так.
другой анон
sage 331 1199487
>>199430
Нет, little endian тут не при чем. Вот тебе же написали:

> 4 kb aligned address


Раз адрес всегд выровнен на 4K (212), значит в его младших 12 битах всегда нули. А раз там нули, то их можно как угодно абузить под флаги - железу это не помешает прочитать адрес с нулями и флаги отдельно.
332 1199565
>>199002

>https://wiki.osdev.org


другойанон
спасибо за годноту. Сам бы не смог найти.
333 1199790
>>199238
>>199400
Ну не стукайте. Я же не новую Фряху-Линукс-Болдженос буду писать. Самую наипростейшую ОС, просто из научного интереса.
К тому, все возможные ниши уже заняты, ящитаю.
sage 334 1199812
>>199790

> все возможные ниши уже заняты


Наоборот ниши освобождаются: Windows следит за тобой, жрет память и обновляется без спроса, от релиза к релизу становясь все хуже, Android следит за тобой, садит батарейку и на многих девайсах не получает даже секьюрити-апдейтов, про iOS и политику Apple можно только молчать. Мир замер в ожидании принципиально новой ОС.
335 1199837
>>199812
И тут люнупс захватывает мир.
336 1199864
>>199837
Как что то плохое
337 1200047
>>199864
Это в качестве шутки было. Впрочем, не думаю, что осесрач тут будет уместен, так что закончим на позитивной ноте "Все ОС говно".
338 1200086
>>199812

>Мир замер в ожидании принципиально новой ОС.


Нуок, готовьтесь к пришествию AnoOS.
изображение.png38 Кб, 562x177
339 1200397
>>199487

Это понятно.

Я про то что

[es:di + 0x1000] - 16 разрядное число и lea eax, [es:di + 0x1000] должно по идее в младшие биты идти, а оно без каких либо телодвижений в старщие пиздует?
340 1200398
>>199487

А, блядь, все, понял. Получается, в записи адрес равен 1 (0x1000 - это как раз 12 нулей и тринадцатая 1 ), а хуйня под флаги -нули.

Вот я бака. Спасибо, сажа-кун.
341 1200400
>>200398
Стоит дополнить, что там >>200397 eax = es:di + 0x1000 фактически означает di + 0x1000 (на es lea абсолютно похуй).
342 1200422
Поясните за такой пролог в main:
push ebx
mov ebx, esp
sub esp, 8
Что это за хуйня?
343 1200426
>>200422
выделяет в стековом кадре 8 байт под переменные
344 1200427
>>200426
Не, это я знаю, мне интересно схуяли там ebx если в стандартном прологе ebp.
345 1200431
>>200427
хз, в 32+ битных ОС регистры используются как регистры общего назначения, а не как в 16 битных досах с ограничениями. предположу, что некоторые компиляторы из исторических соображений используют ebp для этих целей, но по факту используй какой хочешь кроме esp и eip
346 1200439
>>200427

>если в стандартном прологе ebp.



Каком еще стандартном прологе? Стандартным является ABI - что компилятор обязуется передавать в определенных регистрах и возвращать результат в определенных регистрах. В остальном компилятор дрочит так как ему больше нравится.
347 1200448
>>200431
>>200439
Окей, это я понял.
Только вот похоже тот сниппет выше был нихуя не весь пролог. Судя по всему вот он:
push ebx
mov ebx, esp
sub esp, 8
and esp, -16
add esp, 4
push ebp
mov ebp, [ebx+4]
mov [esp+4], ebp
mov ebp, esp
sub esp, 84h
И у меня всё тот же вопрос - нахуя?
348 1200503
>>200448
кык. чёт хуйня какая то. что за компилятор? может быть, это обфускация, а может это неудачная попытка оптимизации по скорости или по размеру
349 1200510
>>197293

>Если частное не влезает в rax, происходит печалька.


Заебись.
350 1200521
>>200503
Короче там какой-то крипт, ибо кроме main там весь .text - недекомпилируемое месиво.
351 1201216
Функция LocalAlloc как я понял выделяет максимум 0xFFFF - 64Кб. А мне нужно 640Кб, что делать?
352 1201304
>>201216
Понял уже что лажанул, наверно надо HeapAlloc использовать. Я только учусь. Пишу hex-поисковик, который будет искать hex-строку с пропуском любого кол-ва байт и записывать смещения в файлик. Точнее, уже написал, только функция ReadFile читает по одному байту из файла и поиск в файле 85Mb занимает около двух минут, значит в файле 850Mb поиск будет 20 мин. Это из-за того что чтение по одному байту?(наверно) Вот и решил увеличить буфер для чтения. Но сколько его сделать? Какой оптимальный буфер?
353 1201543
>>201216
Неправильно понял. Выделяет, сколько попросишь. Алсо, оно почти не содержит магии, просто обертка над обычной кучей для совместимости.

>>201304

> ReadFile читает по одному байту из файла


Да, каждый ReadFile - это поход в ядро через несколько презервативов, поэтому и медленно.
Осиль memory-mapped IO (CreateFile/CreateFileMapping/MapViewOfFile), отображай по паре сотен метров за раз (ну или больше даже, если у тебя x86-64), пусть система ебется с чтением файла, а ты ищи свои байты.
sage 354 1202400
>>198643

> Вы же всё равно нихуя в них не поймёте.


> на скринах >>198102 хеллоу во...


Да мы вообще нихуя в олли не понимаем, но зато одноклассники называют нас хакирами.
Ну-ну-ну! Но-но-но.mp43,8 Мб, mp4,
486x360, 1:23
355 1202476
>>202400
Не надо грязи. Функция GetWindowTextLength в Хеллоуворлде без надобности.
356 1202491
>>201304

> Какой оптимальный буфер?


Размером с кластер файловой системы, поскольку именно столько за раз ось и считывет. Все это гуглится на раз.
357 1202521
>>200510
Блять, проверил, действителньо печалька происходит. Могли бы сделать сохранение верхней части результата и не падать, блять. Хотя да, бесполезно. Придётся ебаться с нормализацией.
358 1202812
>>202491
Ось-то считывает, только ты можешь у ядра попросить 64к за раз, а можешь мегабайт за раз. И потратишь на это в обоих случаях один сисколл.
2018-06-04 22-48-34.mp423,4 Мб, mp4,
1280x720, 1:18
359 1203002
Готово! Первая прога на асме.
Сделал
invoke CreateFileMapping, eax, 0, PAGE_READONLY, 0, 0, 0
invoke MapViewOfFile, [hMapFile], FILE_MAP_READ, 0, 0, 0
Вроде норм, на видео поиск по файлу 800Мб.
360 1203120
>>203002
Сука, ты специально так медленно тайпал?
361 1203125
>>203120

>тайпал


>тайпал


>тайпал


>тайпал


>тайпал



Пиздец, подвороты своим новоязом уже эмигрантов с брайтона переплевывают.
362 1203126
>>202491
Про опережающее чтение не слышал?
363 1203134
>>203120
Да не, наоборот пытался быстрее, чтобы размер видео был меньше, спать хотел, ещё поле ввода табом не переключается, хотел как лучше а получилось..
Ща обработчики ошибок доделаю и скину програмку.
364 1203144
>>203125
Да чё ты, мэн, нормально же токили, обычный вопросик аскнул, а ты завёлся. Чиллься.
365 1203146
>>203126
Ты кусок ебаного дебила, чтение в любом случае идет блоками, кластерами. Хоть опережающее, хоть опаздывающее, как у тебя.

>>203125
Говна въеби, шалава малолетняя. Учить она еще меня будет как на двощах общаться.

>>203134
Научись слепой печати, это не долго (хоть и не оче приятно первые 2-3 месяца) и сильно повысит качество твоей жизни.
366 1203157
>>202491
В моём случае лучше через файл маппинг, потому что ещё есть "проблема пограничного значения", это если я ищу строку 12345678 и 1234 в конце текущего блока, а 5678 в начале нового блока, это тоже обрабатывать надо, а это пипец. Если прога совсем низкоуровневая, то да, надо кластерами, спасибо.
Screenshot68.jpg5 Кб, 178x146
367 1203413
Проблема, помогите.
После того как строка найдена, увеличиваю счётчик:
mov ebx, [FoundCounter]
inc ebx
mov [FoundCounter], ebx
по окончанию файла конвертирую значение в ascii. Но значение то шестнадцатеричное. Как лучше сделать? Преобразовать готовое значение в десятичное(как?), или сразу как-то счётчик обрабатывать?
image.png7 Кб, 408x119
368 1203446
Как, дебажить DOS-приложения под IDA? Она предлагает использовать bochs-debugger, но когда я его запускаю, то получаю пикрелейтед.
Вообще, в принципе, IDA не так уж и нужна, мне бы что угодно, способное дебажить 16-бит под форточками.
369 1203459
>>203446

>Как пропатчить KDE2 под FreeBSD?


Ну ты фикус. TurboDebugger тебе чтоли нужен?
370 1203461
>>203446
debug.com
371 1203524
>>203157
В твоем случае есть проблема "32-битное фрагментированное адресное пространство и файл на полтора гига". Для учебной проги решение норм, а вот для реальной все равно нужно делать регионы какого-то максимального размера, и ремапить их по необходимости.

>>203413
wsprintf %d или вручную делением на 10.

>>203446

> что угодно, способное дебажить 16-бит под форточками


Билд DOSBox со включенным дебаггером? Но лучше все же Turbo Debugger, который уже посоветовали.
372 1204348
>>203146

>чтение в любом случае идет блоками, кластерами


И это значит, что буфер должен быть размером, кратным кластеру. А не всего с один сраный кластер, коий по дефолту 4кб.
373 1204815
Почему vc++ для x64 генерирует исключения, даже если в ключах всё, связанное с исключениями, отключено? Для одного и того же кода с одними и теми же настройками компиляции в х86 нет exception data directory, а в x64 - есть. В обоих конфигурациях в том числе отключены внутренние функции, дефолтные библиотеки, CFG, оптимизация, вот это всё, что приводит к генерации CRT bootstrap'а. Из #include'ов - и там и там <Windows.h>
374 1204855
Можно ли при распаковке образа в рантайме забить на восстановление image data directory? Загрузчик/внутренние функции могут к ним обращаться в ходе работы программы?
sage 375 1204911
>>204855
Функции, которые работают с ресурсами, пойдут в ресурсы через директорию ресурсов, GetProcAddress() пойдет в экспорты (т.е., если у программы, например, плагины, и плагин-апи лежит в .exe, и ты как раз .exe распаковываешь, все сломается).
376 1204917
>>204911
Есть где нибудь полный список таких подводных камней, или самому догадываться придется исходя из различных возможностей ОС и процессов в ней?
377 1204923
>>204911
И можно ли со спокойной душой спокойно коверкать IMAGE_FILE_HEADER, IMAGE_NT_HEADER, и остальные заголовки в PE под IMAGE_BASE, если я например хочу, чтобы образ, восстановленный из дампа, не запускался без ручного восстановления? Или в винде есть какие нибудь популярные механизмы, которые в рантайме обращаются к этим заголовкам?
sage 378 1205041
>>204917
>>204923
Вряд ли список найдешь где-то. Есть спека на сам PE-формат, но реальное поведение лоадера не документировано и на протяжении истории Windows менялось не раз. И не только поведение лоадера - например, в 9x Explorer хотел, чтобы ресурсы лежали в начале .rsrc, а если его не ублажить, не показывал иконку и версию в свойствах файла).

> Или в винде есть какие нибудь популярные механизмы


Все те же, что и выше - чтобы добраться до DataDirectory, нужно офсеты, а офсеты как раз в этих заголовках. Возьми IDA, настрой подгрузку символов и смотри. Если DataDirectory твоей программе не нужна, можешь портить, в принципе.
379 1205609
Не пойму почему SendInput работает со структурой KEYBDINPUT когда указываешь размер структуры 28 байт. Там же 20. Или нет?
Screen9.jpg27 Кб, 387x206
380 1205701
>>205609
Причём работает даже когда следующая структура начинается через 20 байт. Почему так?
sage 381 1205819
>>205609
>>205701
64-битная ОС? Там после time 4 байта для выравнивания по 8-байтовой границы, потому что ULONG_PTR 64-битный. Соответственно, получается 2 + 2 + 4 + 4 + (4) + 8 = 24, а не 28.
382 1205828
>>205819
Точно. Спасибо, подозревал что что-то не так с этим ULONG_PTR.
383 1205840
>>205819
Тогда вопрос: какой размер указывать? Если прогу запустят на 32-битной ОС?
384 1205843
>>205840
Тьфу затупил
385 1205941
>>175091
Рудакова почитай, также есть еще Пирогов по асму и дисасму, тоже пойдет.
386 1206125
>>204348
Да, кратному. Спасибо что уточнил.
image.png34 Кб, 545x360
387 1206604
Что означает вот эта вот хуита под последним сегментом? Это не стек.
388 1206609
>>206604
А, и ещё: как в FASM, в формате MZ
1. Явно указать конец сегмент?
2. Инициализировать сегменты один за другим, строго в том порядке, как я их указываю в листинге?
изображение.png114 Кб, 1848x717
389 1206876
Кто нибудь знает, как из TLS-колбэка, выполняющегося до входе в OEP, повлиять на сам OEP, на который будет совершен переход после выполнения всех колбэков? Я уже пробовал в коллбэке менять в optional header'е entry point, но это не сработало. В стеке я нашёл собсна сам OEP, и если заменить его на нужный, то это сработает. Вот только я не знаю, как программно добраться до этого места в стеке например, через какие структуры. На первый взгляд кажется, что вершина стека в коллбэке и то место в стеке, где находится подложный ОЕР, никак не связаны. Или это уже внутренности винды, и это не задокументировано никем и нигде и нет никаких гарантий, что такой мухлёж сработает на любой другой винде в любом другом процессе?
inb4 нахуя мне это - предполагаю, что неправильный OEP собьёт с толку дизассемблеры, делаю что то типа протектора в образовательных целях.
390 1206903
>>206876
mov [esp+4], eax
mov [esp+8], eax
mov [esp+12], eax
Это?лол
391 1207044
>>206903
Прикалываешься?
392 1207080
>>207044
Возможно, не шарю в тлс-каллбэках. Как ты изменишь адрес возврата из виндовой функции в то время когда она уже выполняется? Это сторонним кодом наверно надо с переполнениями стека, а это уже будет вирус. Может попробовать сделать имитацию этой функции, сделать её частью своей проги, а уже в ней делать адреса какие захочешь.
393 1207082
>>207080
call = push, jmp
ret = pop, jmp
394 1207084
>>207082

>call = push, jmp


Откуда это будет выполняться? Наверно из самого каллбэка этого.
395 1207088
>>207084
Или я короче хз. Просто предположил что функция сама положит нужный адрес entry point.
396 1207165
>>207088
Это так? Потому что чисто логически, если в той ячейке стека будет лежать адрес входа в функцию, то тогда call функции будет перед entry point.
397 1207170
>>207080
TLS коллбэк не из точки входа вызывается, он вызывается загрузчиком судя по всему, где то из ntdll, над стеком точка возврата - не ОЕР. Мне надо понять, как загрузчик после выполнения TLS коллбэков передает управление на ОЕР, или в какой структуре, управляемой загрузчиком, на момент обработки TLS, находится ОЕР
398 1207171
>>207080

> Как ты изменишь адрес возврата из виндовой функции в то время когда она уже выполняется?


Так мой же код. (&ModuleHandle)[-1] = newReturn;
399 1207198
>>207170
Так в этом нет смысла. Ты же всё равно не сможешь изменить виндовский код без хакерских приёмчиков. Ну допустим, у тебя винда поместит твою прогу по одному адресу и передаст ей управление, у меня по другому адресу. (очень поверхностно себе это представляю). Ну и если ты, каким то образом умудришься указать явный энтри пойнт, то у меня будет выполняться какая-то непонятная херь и краш, бсод. Какой смысл? Или у тебя задача всё же другая?
400 1207205
>>207198
Хотя.. наверно можно. Будем ждать профи.

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


Это конечно херня. Но как сделать изменение результата функции до того как этот результат получен?
401 1207250
>>207198

>Какой смысл? Или у тебя задача всё же другая?


еще раз, я пишу что то типа протектора/упаковщика в образовательных целях, то есть на вход мне подаётся РЕ-файл. С целью противодействия дизассемблирования мне показалось поправьте, если не прав неплохой идеей в ходе упаковки в OptionalHeader ставить кривой OEP ОЕР+const, чтобы дизассмблер поперхнулся на нем, предоставив ачкеру на обозрение какую то кашу. Но вот TLS коллбэк, написанный мной и вшитый в упакованный файл, выполняется загрузчиком да? до передачи управления ОЕР, и в нем я хотел бы проста тупа взять и ОЕР-const сделать, чтобы после TLS callback'ов управление передалось на настоящий код. Вот и вопрос, я вижу в стеке ложный OEP, считанный загрузчиком из OptionalHeader'а, но не знаю как до него добраться. Не знаю, через какие структуры к нему пролезть, РЕВ, TEB там, вот эти ребята.
402 1207327
Вы вот всё со своим сверхразумом. Лучше мне подскажите как менять позицию курсора в поле edit, например переместить его в конец строки, я нашёл только вариант - через sendinput отправлять клавишу End (всё равно работет только с размером 28 почемуто).
403 1207342
Вы правда считаете что лучше идти от сложного к простому, чем от простого к сложному?
немного дзена для атмосферы
404 1207352
>>207327
>>207342
Дегенераты уровня /зк as is.
sage 405 1207401
>>206609
ЯННП. Покажи исходник.

>>206876
>>207250
Из TLS патчить в хедерах точку входа бессмысленно. Она как минимум задолго до вызова твоей TLS-функции EP кэшируется в TEB->ProcessEnvironmentBlock->Ldr->InLoadOrderModuleList->EntryPoint. Но и там ее править бесмысленно, потому что в контекст треда задолго до LdrpInitialize, еще когда тредик создавался в NtCreateUserProcess, положили эту самую EP, а RtlUserThreadStart положил ее в стек, в самое начало.

> Лучше мне подскажите как менять позицию курсора в поле edit


Если права есть, то можно отправить EM_SETSEL с параметрами, равными длине текста. Но это работает только для стандартных Edit. Для рандомного поля ввода шли нажатиями.

> всё равно работет только с размером 28 почемуто


Документацию читать пробовал? Размер 24 - это размер KEYBDINPUT, а посылать надо INPUT, и размер тоже для INPUT указывать, а это на 64-битной системе вообще 40, потому что там union, содержащий и другие, более длинные члены.
sage 406 1207403
407 1207448
>>207401
Насколько плохим является решение из TLS callback'а прогуляться по стеку пару 0хтысяч байт вверх и вниз в поиске VA OEP с целью отнять константу? Такие подходы практикуются вообще?
sage 408 1207498
>>207448

> пару 0хтысяч байт вверх


Ну если уж делать так, то стоит искать весь CONTEXT целиком, проверить, что Eip/Rip там попадает на RtlUserThreadStart (в XP не экспортируется), Esp/Rsp в регион стека, а в Eax/Rax будет лежать адрес (по крайней мере, в 7 еще лежал) - так чуть-чуть понадежнее. Но гораздо надежнее похукать ZwContinue, туда прилетит готовый адрес CONTEXT аргументом, а тебе останется лишь снять хук и пропатчить Eax/Rax в контексте. Но в целом это будет не более сложно для реверсера, чем обычная расшифровка в TLS кода по EP.
Screen6.jpg23 Кб, 422x193
409 1207676
>>207401
Вроде разобрался.
Указывать нужно размер самой большой структуры INPUT, у меня это MOUSEINPUT, хоть я и использую KEYBDINPUT.
Так как у меня программа 32-битная, то этот размер 28 байт. Но для 64бит он вроде 32 должен быть.
И вообще, зачем указывать этот размер, система сама не в состоянии его определить? Дичь какая-то.
410 1207763
Как лучше проверить делимость числа на 3?
411 1207768
>>207763
То есть, счётчик увеличивается на единицу в цикле, как только он делится на три то выполняется условие. Как лучше сделать?
sage 412 1207797
>>207768
К сожалению, только делением. Но ты можешь сделать два счетчика - один будет считать по единицам, а второй ты будешь на каждый третий раз сбрасывать.

>>207676

> 4 байта указатель


Проиграл. Нет, заголовок структуры - это просто имя, содержимого структуры оно не определяет, места не занимает.

> 8 байт на пике


Только в 64-битной ОС.

> Указывать нужно размер самой большой структуры INPUT


Я тебе уже писал, что указывать нужно размер INPUT, он всегда одинаковый. Да, по сути это размер dwType + размер MOUSEINPUT, потому что она самая большая.

В 32-битной ОС размер INPUT: 4 байта dwType, 24 байта MOUSEINPUT (там все 6 полей по 4 байта), всего 28. Размер KEYBDINPUT: 2 ворда + 3 дворда = 16 байт. И не забывай, блять, про dwType в INPUT, он не часть union, он должен быть всегда.

> И вообще, зачем указывать этот размер, система сама не в состоянии его определить?


Представь, что в Windows 11 в INPUT добавляют TOUCHINPUT, и его размер больше MOUSEINPUT, из-за чего размер всей структуры INPUT меняется, и SendInput вместо второго и последующих элементов массива читает мусор. Но Microsoft позаботилась о тебе: если твоя (скомпилированная до этих изменений) программа передаст старый размер INPUT, система увидит старый размер и будет знать, что это старый формат INPUT, который умеет только в mouse/keyboard/hardware, и ничего не сломается. А новые программы, собранные с новым SDK смогут использовать добавленные возможности.
413 1207823
>>207797
Да причём тут ОС то ёптабля, ты мне первый раз написал про ОС, у меня сразу каша в голове>>205840.
Думаю тут всё проще: пишешь 32-битное приложение - указываешь один адрес, пишешь 64-битное указываешь другой. А компилировать и запускать можно хоть на 128битной ОС.

Указатель имелся ввиду dwType, чтобы лишних скринов не делать.
414 1207826
>>207823

>указываешь один адрес


указываешь один размер
fix
415 1207828
Ты мне помог, спасибо. Просто немного немного критики (если это так конечно, лень проверять).
416 1207836
>>207763
Раздели var1 на 3, запиши результат в var2, var2 умножь на 3 и сравни с var1. Если значения равны, то число делится, иначе ты потерял точность из-за округления интов и оно не делится
417 1207845
>>207836
Лол, в асме попроще, там после команды div результат в eax, остаток в edx. Ну и если edx после деления 0, значит число делится. Просто ещё есть проверка на чётность, она ещё проще - test eax, 1, если результат 0 то число чётное.
sage 418 1207910
>>207823
Да, извини, я имел в виду 32-/64-битные приложения, а не ОС. Алсо, я не вполне понимаю, зачем ты вручную считаешь. В Си есть sizeof, в фасме есть sizeof.имяструктуры, в масме тоже есть SIZEOF имяструктуры.
419 1207913
>>207845
Да я не заметил, что не в сишном треде нахожусь
420 1207915
>>207910
Потому что я раб асма, для меня нет больше языков программирования. Вот у меня рвотный рефлекс от этого>>207836, а от более высокоуровневых языков тем более. Просто у меня мало мало практики, наверстаю.
421 1207917
>>207915

> наверстаю


Туда ли ты зашел, верстальщик? Версталы в воркаче сидят.
422 1207962
>>207913
Тогда давай я тебе ещё пердак разогрею. Командой тест можно проверять не только чётность, но и делимость на числа степеней двойки - 2,4,8,16,32,64...
423 1207967
Подумал, а почему игры тормозят, ведь железо же хорошее. А им только чтобы определить делимость числа нужно 3-4 высокоуровневых команд, которые содержат в себе 5-6 команд асма. А определить делимость числа это нихуя не на один раз, простой цикл с выходом при делимости числа уже проблема, а сколько этих циклов в 4-32 Гб проге? Миллиарды? Сикстильярды?
424 1207975
>>207967
Вы же понимаете что такое цикл? То есть, чтобы выйти из цикла когда счётчик будет равен 512, нужно проделать 3 операции по пять асмовских команд 511 раз.
Считаем, 3x5x511=7665 ненужных вычислений. НО! этот цикл то не один, а их хз сколько. Даже взять миллион, это уже 7 665 000 000 ненужных операций. И это я ещё не переводил в такты процессора.
425 1207979
>>207975
ОЙ блять. А выполняющаяся программа в памяти, весом в 2гб, имеющая уже скажем 200 таких циклов, будет к ним обращаться снова и снова, пока она не будет завершена. Тут счётчик вообще улетает в космос.
Скажу просто - КПД 0,0001%
426 1207982
Почему, кстати, КПД не применяется к программам?
427 1207986
>>207982
Знаете почему не применяется? Догадываетесь? Потому что тогда всякие java-пограмисты станут нахуй никому не нужны. А почему так происходит? Догадываетесь? Потому что дядькам на верху нужно чтобы всё так и было.
Если ты лох вафельный, изучай только асм!
428 1207988
>>207986

>Если ты лох вафельный


Если ты НЕ лох вафельный
Да похуй, правда всё равно за мной.
430 1208044
>>207962
Да не, я шарю в этом, просто закладки асм и си треда рядом, и я мисскликнул)
431 1208047
>>208044
(Дополнение)
А вот можно ли поделить на 3 быстрее команды div интересно узнать. Мб есть какой-нибудь трюк, вроде шифта битов и прибавления числа, как при умножении

k = 5, m = 73
k*m = (m<<2)+m
432 1208155
>>207982
А анализ алгоритмов это что по-твоему?
433 1208212
>>208021
Да сам проигрываю чё я тут спьяну навычислял. Но доля правды в этом всё же есть: 1 будущее за робототехникой 2 Ненужные операции потребляют энергию 3 аккумулятор сейчас проблема и всегда будет проблемой
434 1208289
>>208047
https://ru.wikipedia.org/wiki/Признаки_делимости#Признак_делимости_на_3
Наверняка еврейские умы уже пытались. Но всё равно попробовать стоит, потому что ситуации бывают разные. В связи с этим вопрос: Где взять хороший справочник команд? С опкодами и циклами. Можно в шапку добавить. Помню был такой в dos-варианте.
436 1208609
Я вот опять выпил жизненные обстоятельства. Вы не обижайтесь на меня и не агритесь, я ни кому не советую так делать и сам не люблю это. Но вот какая штука, я целый день об этом думал - цикличность мысли. Понимаете? Ща объясню
Вот, например, анончик который занимается изучением ОС(уже наверно сам понял). Зачем ему заниматься изучением велосипеда, если можно заняться изучением ОС мобильных девайсов, дизассемблировать их, убрать лишние команды и тем самым увеличить время до перезарядки девайса. Это же реально можно продать, и сделать это намного реальней чем пилить свою ОС.
Может быть я тут раскрываю секреты полишенеля, но я бы трезвый к этому не пришёл бы, или пришёл бы но не скоро.
sage 437 1208611
>>208212

> Ненужные операции


Либо ты делаешь их явно, либо у тебя CISC, и ты все равно их делаешь, только уже в микрокоде. Потому что "ненужность" каких-то операций - это лишь твои фантазии.

>>208289

> Где взять хороший справочник команд?


Пишешь в гугле: Intel SDM. Второй том - справочник. С опкодами и псевдокодом каждой инструкции.
438 1208617
>>208611

>это лишь твои фантазии


У меня просто башню сносит. Я в своей>>203002 проге ввёл просто ВС для поиска. Ушло около 2-х минут чтобы найти 3 100 000 с чем то совпадений.
439 1208625
Ну короче щас застопорился на этом делении на три. Начал делать обработчики ошибок, и в поле поиска пользователь может ввести букву К например. А это вызовет ошибку.
Вобщем решил подойти творчески, с душой, и не дать пользователю сделать такую ошибку. А заодно и автоматически вставить дефисы после каждого байта, хоть вручную хоть после копипасте. Но вот дефис должен вставляться каждый третий символ. И не знаю что лучше: заранее эти дефисы понаставить, или же чтобы всё было одновременно со считыванием строки поиска.
sage 440 1208638
>>208625

> Ну короче щас застопорился на этом делении на три


while (1) {
digit = get_digit();
check_digit(digit);
if (first_digit) {
store(digit);
} else {
store(digit);
store('-');
}
first_digit = !first_digit;
}
Где тут деление на 3? Зачем?
441 1208654
>>208638
Млин, ты прикалываешься? Алгоритм такой:
1 при любом изменении строки edit программа прерывается на обработку
;-----обработка
2 создаю область памяти = столько сколько символов в строке
3 создаю вторую область памяти
4 записываю изменённые значения из первой области во вторую
5 выдаю в строку edit вторую область памяти

И как мне быть? Сразу записать во вторую область дефисы, или же это делать одновременно со считыванием данных из первой области памяти?
442 1208657
>>208654
Ну ясно-понятно что вторую область создаю размером уже с учётом дефисов(это легко).
443 1208660
>>208654
При чём, при таком алгоритме ещё нужно чтобы сами дефисы были прогой распознаны и вставлялись во второй раз.
444 1208663
>>208660

>и вставлялись во второй раз.


и НЕ вставлялись во второй раз.
Кто всегда удаляет эту частицу?
mind1.jpg151 Кб, 350x263
445 1208664
Тут нужен интеллект, это вам не умные книжки читать.
446 1208668
>>208664
Меня опять несёт, сори, сори, сори...
447 1208674
Тащем то вариантов тут всего два:
1 Считывать каждуй байт из области 1 и проверять на делимость на три, чтобы вставить дефис
2 Заранее понаставить дефисов в месте: адрес второго блока памяти +3. И потом сверять каждый байт во втором блоке памяти перед копирыванием.
ВОТ Я НЕ ЗНАЮ!! КАК СУКА ЛУЧШЕ СДЕЛАТЬ!
448 1208868
>>208674
Вот по трезвому опишу что мне нужно, без всяких этих
Пусть у меня в поле edit уже есть два символа 12, я ввожу третий символ. Поле edit посылает сообщение что оно изменилось. После чего создаётся два блока памяти, один размером три байта, другой рамером 4 байта(пять с завершающим нулём, но это не важно).
Функцией GetDlgItemText получаю символы из поля edit в первый блок памяти, там будет три байта - 31,32,33. Теперь мне нужно сделать так чтобы во втором блоке памяти была следущая строка байт -31,32,2D,33(2D - дефис). Затем функцией SetDlgItemText посылаю в поле edit строку байт из второго блока памяти. Уничтожаю блоки памяти.
Ещё есть тонкость в том, что когда я после ввода 123 я введу 4 то в первом блоке памяти будет 31,32,2D,33(уже с дефисом).

Просто будет выглядеть классно, профессионально и вам может пригодится. Помогите
449 1208870
>>208047

>А вот можно ли поделить на 3 быстрее команды div интересно узнать. Мб есть какой-нибудь трюк, вроде шифта битов и прибавления числа, как при умножении



Если в плавучке - то быстрый обратный корень*2
450 1209125
Есть знатоки VC++ тут? Какого хуя он не компилирует выделенную инструкцию? Или он как то чухает, что я что то неладное затеял со стеком и молча игнорирует мои просьбы? Как обмануть канпелятор?
TLS_OEP_OFFSET - не нулевая константа
451 1209142
>>209125
Всё, отбой тревоги. Я наебал компилятор.
image.png81 Кб, 480x480
452 1209238
А в каком виде ассемблер помещает в код исполняемого файла всевозможные адреса? То есть очевидно же, что он не может знать, какой адрес ОС выделит той или иной переменной во время её инициализации. Так как он помечает эти данные до, собственно, исполнения файла?
453 1209241
>>209238

Как это не может? В заголовке PE или ELF есть адреса. А уже ОС располагает с этого адреса.

hint: страничная виртуальная память
454 1209249
>>209241
А если речь идёт о реальном режиме с сегментной адресацией?
455 1209323
>>209249

> А если речь идёт о реальном режиме с сегментной адресацией?


Тогда еще проще. В заголовках есть таблица поправок. Каждый раз, когда ты делаешь:
mov ax,CSEG
генерируется поправка. Когда файл грузится, MS-DOS проходит по списку поправок и втыкает туда реальные значения сегментов. А внутри самого сегмента адресация "абсолютная", т.е., [ds:10] всегде ds*16+10, вне зависимости от того, куда тебя загрузили.
456 1209511
>>209323
О, спасибо за разъяснения.
image.png10 Кб, 362x261
457 1210309
Какой корректный синтаксис в FASM для создания процедур? Пикрелейтед не работает.
458 1210328
>>210309

>Пикрелейтед не работает


Ты

>>include \macro\proc32(64).inc


забыл.

алсо, proc - это обычный макрос-сахарок, который за тебя аргументы по ABI разруливает.

Без него - пердоль руками меточки и ручками по википедии, согласно соглашению твоей операционной системы/разрядности работу с регистрами пердоль.
sage 459 1210331
>>210309

> Какой корректный синтаксис в FASM для создания процедур?


Никакого. Макросов для для 16-битного кода нет. Можно, конечно, адаптировать proc32/64, про которые написали выше, но особого смысла в этом нет, ибо 16-битных код нахуй никому не вперся в 2018.
sage 460 1210333
>>210309

> Какой корректный синтаксис в FASM для создания процедур?


Никакой. Макросов для для 16-битного кода нет. Можно, конечно, адаптировать proc32/64, про которые написали выше, но особого смысла в этом нет, ибо 16-битных код нахуй никому не вперся в 2018.
461 1210387
>>210328
>>210333
Ясно. Вот такая конструкция сможет имитировать функционал call? Тело процедуры находится в том же сегменте, что и "вызов", так что "вызов" можно считать ближним:

push byte $
jmp _proc
<...>
_proc:
<тело процедуры>
pop AX
add AX,4h
jmp AX
462 1210442
>>210387

Во-первых:

https://en.m.wikipedia.org/wiki/X86_calling_conventions

Во вторых, нет, используй call. Функции и процедуры делаются с помощью меток и передачей параметров по соглашению о вызовах.
463 1210462
>>210442
ССАЛ Я НА КАНВЕНЦИЮ))))))))))))0 А НА КАЛЛ КАЛ КЛАЛ)))))))))0000000000000
464 1210488
>>210442
Получается, вызов любой процедуры должен быт организован таким, и только таким способом?
В статье описана передача параметров через стек. При этом, на различных ресурсах, упоминается передача параметров через регистры. А что, если пользователь решает пойти именно таким путём? При этом мы не знаем, в каких именно регистрах он передаёт параметры в процедуру.
465 1210489
>>210488

>При этом мы не знаем, в каких именно регистрах он передаёт параметры в процедуру.


Знаём. По порядку, начиная с rdi.
466 1210536
>>210489
Это ты PUSHA(D) имеешь ввиду?
467 1210564
>>210442
>>210488
>>210489
Получается, сама идея подпрограмм (функции, процедуры, etc) основывается на следующих строго обязательных к исполнению постулатах:
1. Определено точное количество аргументов, которые предполагается передавать в данную подпрограмму;
2. Определёны множества возможных значений для каждого из аргументов;
3. Данный аргумент может принимать значения из заданного для него множества, и только из него;
4. Подпрограмма должна работать только с теми данными, что были переданы в неё через аргументы, либо с глобально доступными данными, либо с данными, которые определяются непосредственно в ней.
5. Подпрограмма не должна изменять никакие иные данные.
6. Подпрограмма может возвращать либо какое-то одно и только одно значение, либо не возвращать никакого вовсе.
Верно?
468 1210581
>>210564
И в таком случае, развивая мою предыдущую мысль, код вида

call _proc

, означает вызов подпрограммы "_proc" без аргументов.

В любом случае, инструкция "call" подразумевает следующие действия:
1. Сохранение адреса возврата на вершину стека: push $+4(near) или push $+8(far)
2. Сохранение смещения дна стека на вершину стека: push bp
3. Поднятие дна стека на уровень вершины стека: mov bp,sp

Блядь, я думал, что в асме швабодка, что можно как угодно крутить какими угодно значениями, что скверна абстракций высокого уровня мешает незамутнённому восприятию красоты байткода. А тут, ВНЕЗАПНО, оказывается, что львиная доля абстракций языков высокого уровня как раз таки обусловлена особенностями исполнения кода на низком уровне.
sage 469 1210623
>>210387

> Ясно. Вот такая конструкция сможет имитировать функционал call?


Почти. push byte недостаточно для переходов в пределах сегмента (64к), надо push word. Далее, ты не различаешь короткие и ближние переходы:
jmp @f ; short jump, 2 bytes: eb rel8
rb 127
@@:
jmp @f ; near jump, 3 bytes: e9 rel16
rb 128
@@:
Поэтому лучше сразу написать jmp near _proc. Ну и с учетом всего этого, нужно делать add ax, 6 (3 байта push, 3 байта jmp).

>>210488

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


Нет, кодовые конвенции нужны только для взаимодействия с чужим кодом (и для предоставления API). Внутри своей программы ты можешь делать все, что захочешь. Например, если собирать сишный код с оптимизациями, компиляторы могут раскладывать аргументы в регистры, причем для разных функций в разные. Они это делают, потому что они знают, что функции не вызываются извне, а там, откуда они вызываются, информация об используемых регистрах доступна. Это тоже соглашение о вызове, но в нем компилятор соглашается сам с собой.
sage 470 1210624
>>210564
Чушь какая-то. Идея подпрограмм состоит в том, что есть кусок кода, управление на который передается и потом возвращается им обратно. Как именно, что оно делает, зачем, кто вызывает, как передает аргументы, передает ли вообще - всегда на совести реализации. Есть стандартные подходы, но это не значит, что можно использовать только их.
471 1210652
Ананасы, ткните носом в ссылку с рабочим масмом версии 6.10-6.13. Желательна установка без танцев с бубном.
sage 472 1210666
>>210652
old-dos.ru
473 1210669
>>210666
Был там, у 6.10 файлы битые. Либо не ту версию качал. Какая там гарантировано рабочая?
sage 474 1210678
>>210669
Сложи содержимое всех папок DISK# в одну, проверь, чтобы директория с установочником и директория, в которую устанавливаешь были без пробелов, русских букв и прочих странных спецсимволов (короче, чтобы были валидным досовым 8.3 именем), выбирай Windows NT при установке. У меня все ок.
475 1210681
Не нашел тредов про не x86 ассемблеры, спрошу тут. Как на Z80 делить числа?
С умножением все понятно, например 15 x 21 = 15 x (16 + 4 + 1) = 15 x 16 + 15 x 4 + 15 x 1 = 15 << 4 + 15 << 2 + 15.
Т.е. в цикле по числу битов (8 или 16) нужно сдвигать первый множитель (15) влево, а второй (21) - вправо, и при флаге переноса CF к результату (изначально 0) прибавлять сдвинутый первый множитель.
А вот деление как можно разложить?
Z80 умеет выполнять сложение, вычитание, смену знака, логические операции и сдвиги.
sage 476 1210684
>>210681
https://en.wikipedia.org/wiki/Division_algorithm
Обычный long division, который "столбиком, как в школе", очень быстро реализуется.
477 1210687
>>210684

>while N ≥ D do


> N := N − D


>end


>return N


Биореактор находится в другом месте, сагадаун.
sage 478 1210688
>>210687
То есть до нормального алгоритма ты доскроллить не осилил?
1529097015614.jpeg2,1 Мб, 3840x2160
479 1210697
>>210678
Добра и денег тебе, анонче.
480 1210700
>>210688
Под остальные (Integer division with remainder, Restoring division, Non-restoring division) для 16-битного деления не хватает 3-х 16-битных регистров, а сохранять/восстанавливать в стеке - медленно.
481 1210718
Линкёр по мудям лупанул.
Первым пиком на: ml.exe /c /coff prog01.asm
Вторым на: ml.exe prog01.asm /AT
Без /coff первый вариант пролетает, но без .com файла, читай: в нихуя.
Выручайте, пацаны. Не хочу надолго застрять у старта.
sage 482 1210728
>>210700
Ты можешь делить 16-битное на 8-битное, получая 8-битные частное и остаток, как сделано в x86. Или тормозить. Других вариантов у тебя все равно нет, лишних регистров тебе ни один алгоритм не прибавит.

>>210718

> /coff


Все правильно ругается, досовый формат объектников - OMF.

> Без /coff первый вариант пролетает, но без .com файла


Потому что /c говорит "только скомпилировать, не линковать", поищи там у себя prog01.obj.

Короч, тут такое дело. Я тебя слегка наебал, надо было, видимо, выбирать второй пункт (MS-DOS/Microsoft Windows) и отказываться от виндовых файлов (наверное), тогда оно устанавливает правильный LINK.EXE в %MASM%\BIN. И после этого у меня собрался хелловорлд.
483 1210730
>>210728
Да, ты меня наебал. Теперь и у меня .com собрался и работает.
484 1210733
>>210623
>>210624
Как всё сложно и противоречиво. Но спасибо за пояснялово.
485 1211356
Переубедите меня от использования pushf/popf

Инструкции тормозные, но как приятно они упрощают реализацию некоторого алгоритма, что трудно побороть соблазн использовать их.
486 1212285
>>210564
Ты можешь хуярить как хочешь, пока не пересекаешься с чужим кодом. Но когда начинаешь пересекаться - нужно иметь какие-то правила взаимодействовать.
487 1212688
>>211356
Связный вопрос: Как узнать какие регистры не изменит api-функция при любом результате этой функции?
488 1212781
>>212688
Почитай ABI платформы, под которую пишешь. Например, в википедии: https://en.wikipedia.org/wiki/X86_calling_conventions#Microsoft_x64_calling_convention
489 1212930
>>203524
Охуеть, только что сам заметил.
https://wasm.in/threads/wsprintf-ne-ochischaet-stek.3877/
sage 490 1213001
>>212930

> wsprintf-ne-ochischaet-stek


a dolzhen?
491 1213074
>>213001
Должен ли был я написать об этом? Нет, не должен.
492 1213180
>>212930

>что такое cdecl call convention?

493 1213196
Как получить список файлов в папке, нужно для бэкапа.
494 1213207
>>213196
Посмотри.
495 1213215
>>213207
Не вижу. Папку надо открывать?
496 1213296
Ну серьёзно, надо чтобы при запуске проги копировалась папка с неизвестным содержимым. Для этого сначала прога должна узнать содержимое(предполагаю), а потому уже CopyFile выполнять. Как узнать содержимое, searchpath, findfilefirst, findfilenext, вот это?
497 1213298
>>213296
ты объясни тебе нахуя задачи высокоуровневого языка делать на асме?
498 1213303
>>213298
Потому что я не знаю высокоуровневых языков, в этой проге всё равно будет низкоуровневая задача. Короче, она будет мониторить сейвы игры на изменения, если изменение(сохранение) успешно то делает бэкап, если нет то выкидывает окошко поверх игры(такая задумка) и можно попробовать сохраниться ещё раз.
499 1213307
>>213303

>Потому что я не знаю высокоуровневых языков


Настало время.
500 1213310
>>213303
это не низкоуровневая задача. если тебе не принципиально это делать именно на асме, то рекомендую взять какой нибудь C# и его FileWatcher с удобной системой событий на изменение файла. если принципиально - кочай конпелятор МАСМа, ищи что в него из WinAPI завезли похожего на файловый монитор.
image.png8 Кб, 257x246
501 1213322
Как в FASM/16 бит выполнить прямой межсегментный переход? За пикрелейт ругается.
sage 502 1213415
>>213303
FindFirstFile/FindNextFile один раз. А потом подписывайся на изменения - FindFirstChangeNotification/FindNextChangeNotification, ReadDirectoryChangesW - вот это все.

>>213322
jmp s_proc:_CALL_record
503 1213465
>>213415
Не мог бы ты ещё подсказать, почему в FASM мы не можем выполнять такую штуку с CS:
mov CS,AX
sage 504 1213472
>>213465
Потому что в CS как и в RIP/EIP/IP напрямую в x86 писать нельзя, для этого есть JMP/CALL/RET, в том числе indirect версии, которые читают целевой адрес из регистра или памяти. Алсо, запись отдельно в CS не имеет особого смысла: если у тебя фиксированный IP, ты можешь сделать far jump, а если нефиксированный, то зачем тебе вообще менять CS? Откуда ты знаешь, что в новом сегменте по текущему IP будет валидный код?
505 1214093
Байтмакаки, начал изучать ассемблер, интересует одна вещь: ASCII вшит прямо в камень Интел, или это стандарт на уровне системы, а сам проц работает только с числами, и я смогу поиграться японщиной?
sage 506 1214138
>>214093
Да, процессор работает только с числами, а интерпретация этих чисел целиком на твоей совести, в процессор ничего не "вшито". Но так как людям нужно обмениваться данными, есть общепринятые соглашения о том, какой символ сопоставить какому числу. Одно из них - ASCII (128 символов), но он уже слегка нинужен, потому что есть Unicode (миллион символов, из которых первые 128 такие же как в ASCII). И да, ты можешь поиграться хоть с японщиной, хоть со старославянщиной, хоть с эмодзями, если твоя система умеет это все рисовать.
507 1214193
Таки помогите с pushf/popf.
Кому не лениво - посчитайте в тактах время выполнения миллиона итераций pushf/popf.

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

Если нужна программа - брошу сюда как только доберусь до компьютера. Да поможет вам инструкция rdtsc
sage 508 1214230
>>214193
Если тебе понадобились pushf/popf для арифметики, а не для ебли TF и других неарифметических флагов, ты делаешь что-то очень неправильно.
509 1214354
>>213472
Кстати, в 8086 инструкция mov cs, ax была валидной.

"On the 86 and 88, but not on the C-MOS versions 80C86 and 80C88, the instruction MOV CS,op is valid and causes an unconditional jump.

The C-MOS versions, as well as the NEC V20 and V30 ignore this coding. This may also be the case on the 186 but has not been tested. The 286+ CPUs consider CS an invalid operand for this instruction and generate exception 6 (Invalid opcode).

The opcode for the MOV CS,op is: 8e [mod:001:r/m]"
510 1214526
>>214230

Постфиксный инкркмент/декремент внутри условий.
Ты понимаешь что inc/fdec ,меняет флаги z и c ?
Неправильно сделали авторы языка Си, когда придумали постфиксные операции.

Короче, вопрос остаётся в силе - какова цена pushf/popf ?
sage 511 1214773
>>214526

> Неправильно сделали авторы языка Си, когда придумали постфиксные операции.


Язык делался не под x86, а под PDP, который (частично) умел в пост-инкременты. Алсо, сейчас оно в ARM отлично поддерживается и очень удобно: mov r0, [r1], #4 прочитает в r0 память по r1, а потом прибавит к r1 4.

> inc/fdec ,меняет флаги z и c


> какова цена pushf/popf


Дороже, чем сделать cmp/test заново. Но ты все равно что-то делаешь неправильно. Тащи код.
512 1215213
Вход: a, x, y, m
Выход: (a + x y) m
Верхние 64 бита каждого умножения и carry флаг при сложении меня не интересуют.

Был такой код:
mulx r8,r9, rsi
add rdi,r9
mov rdx, rcx
mulx r8, rax, rdi
ret

Я могу избавиться от лишнего mov, сохраняя результат умножения сразу в rdx? Может он быть source и destination одновременно? Вот так:

mulx r8, rdx, rsi
add rdx, rdi
mulx r8, rax, rcx
ret
513 1215283
>>214773

Я пока ничего не делаю, а изучаю вопрос.
Потестировал. Вот как-то так:

rdtsc
movDWORD PTR _start, eax
movDWORD PTR _start+4, edx

movecx, 1000000

label_loop:

pushf
; nop
popf
loopnzlabel_loop

rdtsc
movDWORD PTR _stop, eax
movDWORD PTR _stop+4, edx

Выходит что пара pushf/popf в среднем занимает 100 тактов. Это очень дохуя. Придётся отказаться от их использования и лепить дополнительные проверки/переходы.

Но всё же интеренсно как поведут эти инструкции на других x86 "камнях".
513 1215283
>>214773

Я пока ничего не делаю, а изучаю вопрос.
Потестировал. Вот как-то так:

rdtsc
movDWORD PTR _start, eax
movDWORD PTR _start+4, edx

movecx, 1000000

label_loop:

pushf
; nop
popf
loopnzlabel_loop

rdtsc
movDWORD PTR _stop, eax
movDWORD PTR _stop+4, edx

Выходит что пара pushf/popf в среднем занимает 100 тактов. Это очень дохуя. Придётся отказаться от их использования и лепить дополнительные проверки/переходы.

Но всё же интеренсно как поведут эти инструкции на других x86 "камнях".
514 1215287
Ну и говно эта ваша Makaba - херит табуляцию.
515 1215589
>>141585

>к вся молодежь ушла в веб



Это биомусор, а не люди.
516 1215897
>>147515

>attassemblerlin[...].webm


>mov ecx, 0


xor ecx, ecx нада, дурень
517 1215976
Если оп до завтра не объявится, я нелегитимный запилю.
sage 518 1215995
>>215976
Ой, а у нас бамплимит уже! Запили, только шапку не проеби.
519 1216068
>>215897
Это заблуждение из времён 8086.
520 1216104
>>215976

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


ОП-хуй здесь.
521 1216109
>>216104
А вот и перекот. Хуй знает зачем перекатываю и вообще слежу, сам уже ничего не делаю, но тред родной уже.
ПЕРЕКАТ
>>1216107 (OP)
>>1216107 (OP)
>>1216107 (OP)
ПЕРЕКАТ
>>1216107 (OP)
>>1216107 (OP)
>>1216107 (OP)
ПЕРЕКАТ
sage 522 1216110
>>216109

> сам уже ничего не делаю


Надоело или потеряло смысл?
523 1216112
>>216110
Для меня сейчас всё потеряло смысл. Хотя наконец-то нашёл работу по профилю уеб-макакой а не полы пидорасить, может, получшает. Да и сам на десятку переехал пару месяцев назад, так что допилка XP теперь только в качестве спортивного интереса, десятку я так и за 1000 лет не отревершу. Надо бы собраться с силами и выложить накоденное.
524 1216428
525 1243331
>>134423
А если нужно из одной процедуры вызвать вторую, а из второй третью и т.д.? Тут не в регистр нужно записывать, а в стек, чтобы хранить цепочку ссылок, по которым тебе нужно будет возвращаться. Да и вообще, что это за идиотизм, избавляться от call'ов только, чтобы избавиться от call'ов? Если в коде много процедур, он же заебется для каждой прописывать push label, jmp proc, pop ebx и jmp ebx. И это не добавляет "хорткорности", это просто идиотизм. С тем же успехом можно запретить использовать любые числа, кроме двоичных, потому что ХОРТКОООР. Или вот тебе еще идея: избавься от возможности вводить в память строки в кавычках, пусть пишут ASCII-коды символов опять же, в двоичном коде, чтобы уж точно не для тупых казуалов.
526 1243332
>>243331
Отписался в мертвом треде -_-
Тред утонул или удален.
Это копия, сохраненная 19 августа 2018 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски