Вопрос по ассемблеру. Требуется следующие: из внешней программы сгенерировать так называемый codecave и вбить его в процесс. Дело в прочем не сложное, но столкнулся с следующей проблемой: команды JE, JLE и т.п. принимают байты, не совпадающие с реальными байтами адреса назначения (т.е. принимает относительный "оффсет"). Но вот относительно чего ?
Он то, как раз научит, но ни как не фасмовский мануал! Имейте совесть различать мануалы! Вообще интеловские и амдешные мануалы это библия ассемблера.......
что ты мне пытаешься доказать? я вроде все предельно просто обрисовал. берешь мануал по тому же фасму и читаешь. там чудесно написано как переместить значение из одного регистра в другой, как сравнить значения, умножить одно на другое и вызвать функцию. интеловские мануалы - это всего лишь тутор по работе проца. ассемблер - всего навсего инструмент для работы с ним. и если ты не пишешь свой компилятор ассемблера, или ось какую ниюуть - то тебе по большому счету проебом на то, что на самом деле хранят сегментные регистры, или по каком правилам генерятся опкоды, или как генерятся прерывания. по большому счеты все это имет весьма косвенное отношение к ассемблеру.
С этого надо было начинать, теперь понятно ваше представление о ассемблере. Печально. Я к тому, что человек попросил совета, с помощью чего ему научиться ассемблеру, а ты посылаешь его к мануалам компилятора, который (еще раз повторяюсь) описывает осинтаксис охватывая некоторые примеры самого ассемблера, научиться ассемблеру по ним не получится! Максимум, что сможешь получить по этим мануалам это представление о языке. p.s. продолжать дискуссию не вижу смысла, ибо она в таком случае выйдет за рамки топика.
такое впечатление как будто со стенкой разговариваю. может поделишься своим пониманием? опять же слова общие у тебя. я утверждаю что получится. и не нужно мне про бедного человека заливать, которому совет нужет. тебе важнее сей час правым оказаться, а не помочь ему. твои посты не информативны увы. напоминиет чем то: Я: утверждаю, что "XYZ" Ты: НЕТ. Я: да, аргумент1, аргумент2, аргумент3. либо докажи обратное Ты: я же сказал, НЕТ. это говорит человек, который несколько дней назад расплескал 3 страницы нытья из за того что его в гугл направили? не смеши меня. лучше поясняй свою точку зрения если она у тебя есть.
Ins3t Я высказал все в самом первом сообщении еще несколько месяцев назад. Я вижу что тебе Ассемблер знаком поверхностно. Конечно можно назвать интеловские мануалы - тутором по процу, но говорить что ассемблер - инструмент для работы с процом это уже грубо. Каждая инструкция ассемблера выступает как источник питания для определенной электрической цепи процессора. ты похож на С++ кодера который поглядел в отладчик, потом ознакомился с fasm/masm/nasm/tasm и теперь считает что знает ассемблер.... Тебе к примеру известны префиксы которые при использовании с интрукциями условного перехода указывают на вероятность перехода ожидаемый/не ожидаемый? я тебя умоляю, где ты аргументы приводил? Утрировать у тебя получается красиво! Я же теюе говорю, что по мануалам ни фасама, ни Насама, ни какого либо другого ассемблеру не научишься.... Вот только не надо после этих слов интеловские мануалы приводить, они и есть учебник, но ты не его порекомендовал а мануал от "компилятора". Если для тебя нет разницы между интеловскими мануалами и мануалом от fasm, то рекомендую почитать интеловские мануалы. Даты посмотри, ты очнулся спустя почти пол года... и сейчас пытаешься что то доказывать, что мне это больше надо... ты даты посмотри, пустослов... и перечитай внимательней эти 4 страницы... Если ты считаешь, что с форума слать в гугл это нормально, то удались и ищи все в гугле, новости на ачате итак прочитать сможешь. p.s. модеры, потрите плиз последние сообщения, оффтопа много.
В IDA_Pro_Advanced_6.1_Full решил отладить прогу я Вот открываю я программу [/url] [/img] [/URL][/img] [/URL][/img] [/URL][/img] Вот я ее открыл. Что это за интерфейс? то есть почему я вижу маленьий участок кода?Какие шаги мне придпринять
Олли ее просто не открывает. Ну начинает открывать, видно также окошко с предуприждением. Жму окей- раз оп и олли пропадает!
Да!! В проге антиотладка, вот олька и вылетает. Против этого помогает Phantom для того чтобы скрыть отладчик нужен всего лишь один плагин. Есть один такой прекрасный плагин - Phantom от Hellspawn-а. Phantom делает свою работу прекрасно, прячет отладчик практически от всего. Помогите пожалуста распаковать VMProtect!!! Ниже я приведу суперотличнийший туториал по этому протектору, с ним же комплекс настроенных инструментов. (Автору респект 100%!!!!) И так. Программа http://webfile.ru/08f06ff4274f699e3d863ad25ae3047e Дальше я скачиваю и читаю http://webfile.ru/d7006031b798063b4371890321f2fdc3 . Вот не помню, откуда скачал- видемо откуда то с exelab. К стати офигено понравилось как написано!! И вот, делаю.Ищу OEP (стр 21) . Скрин http://webfile.ru/d091ba9c619edbc5c49beb52d3d6d0bf и http://webfile.ru/00f7273d8ae2336ba5e8df0d004d906d . Вопрос- Наверное ерунда какая то вышла.Или нет? Я программу запускаю сначала т.е открываю ее в OlliDbg и пытаюсь чирез Go To- Expression пoйти туда, куда указал скрипт- на 5FD63D. Cvjnhbnt!!!!Я никуда не прихожу! Я тиряюсь- а что же это и что же я делаю.. Ну просто не знаю, что это, насколько я баран и где! В общем. Дийствитильно я на OEP или нет? Помогите понять пожалуйста!! И разобрать прогу дальше. Например мне непонятно удалось ли мне встать на EntryPoint этой программы. Я сам это не понял. Выполнение скрипта остановилость на строке 5FD63D. А самое непонятное, что когда я в отладчике OllyDbg снова открыл программу и попробовал стать на этот адрес, я увидел совсем не то, что при выполнении скрипта. Увидел отсуцтвие кода, по-сути. Вероятно я туплю зверски. Выходит что. Когда скрипт выполняит поиск OEP, я после этого в OllyDbg вижу как будто бы вменяемый код, который начинается с 0040100. До работы скрипта OllyDbg показывает на тех-же адресах ряды нолей. Но может так и надо! А на счет OEP пожалуста напишите-то или нет??
Ты даже на этом форуме, как мудак, умудрился ошибиться разделом. На exelab'e тебе четко сказали, либо обращайся в эту тему https://ssl.exelab.ru/f/index.php?action=vthread&forum=1&topic=17633&page=23, либо отдыхай
Суть задания такая(VMLab): раз в секунду запускается АЦП, измеренное значение напряжения, формируемого управляемым источником напряжения, выдается в двоичном виде на линейку светодиодов. ; ****************************************************** ; BASIC .ASM template file for AVR ; ****************************************************** .include "C:\VMLAB\include\m88def.inc" ; Define here the variables ; .def temp =r16 ; Define here Reset and interrupt vectors, if any ; reset: rjmp start reti ; Addr $01 reti ; Addr $02 reti ; Addr $03 reti ; Addr $04 reti ; Addr $05 reti ; Addr $06 Use 'rjmp myVector' reti ; Addr $07 to define a interrupt vector reti ; Addr $08 reti ; Addr $09 reti ; Addr $0A reti ; Addr $0B This is just an example reti rjmp TIM1_OVF reti ; Addr $0F reti ; Addr $10 reti ; Addr $11 reti ; Addr $12 reti ; Addr $13 reti ; Addr $14 rjmp interraptADC ; Addr $15 ADC Conversion Complete ; Program starts here after Reset ; start: ldi r16, low(RAMEND) out SPL, r16 ldi r16, high(RAMEND) out SPH, r16 ldi r16, 0b00011111 out DDRB, r16 ldi r16, (1<<CS10) sts TCCR1B, r16 ldi r16, (1<<TOIE1) sts TIMSK1, r16 cbi DDRC, 0 ldi r16, (1<<REFS0)|(0<<REFS1)|(1<<ADLAR)|(0<<MUX3)|(0<<MUX2)|(0<<MUX1)|(0<<MUX0) ;îïîðíîå íàðÿæåíèå - íàïðÿæåíèå ïèòàíèÿ...PC0 - íîæêà ÀÖÏ sts ADMUX, r16 ldi r16, (1<<ADEN)|(1<<ADSC)|(1<<ADATE)|(1<<ADIE)|(1<<ADPS2) ;âêë ÀÖÏ...ðàçðåøèë ïðåðûâàíèå îò ÀÖÏ...âûáîð íåïðåðûâíîãî ïðåîáðàçîâàíèÿ...ðàçðåøèë ïðåðûâàíèå ïî ÀÖÏ...÷àñòîòà 1 ÌÃö sts ADCSRA, r16 ldi r16, (1<<ADTS2)|(1<<ADTS1)|(1<<ADTS0) sts ADCSRB, r16 sei forever: rjmp forever TIM1_OVF: sbis interraptADC: rjmp mll cbi interraptADC: reti mll: sbi interraptADC: reti interraptADC: ldi r16, (0<<PORTB4)|(0<<PORTB3)|(0<<PORTB2)|(0<<PORTB1)|(0<<PORTB0) out PORTB, r16 lds r16, ADCH mov r17, r16 subi r17, 0b11111111 ;255 brsh metka1 ;ïåðåéòè åñëè r16 >= 255 mov r17, r16 subi r17, 0b11001100 ;204 brsh metka2 ;ïåðåéòè åñëè r16 >= 205 mov r17, r16 subi r17, 0b10011001 ;153 brsh metka3 ;ïåðåéòè åñëè r16 >= 153 mov r17, r16 subi r17, 0b10011001 ;102 brsh metka4 ;ïåðåéòè åñëè r16 >= 102 mov r17, r16 subi r17, 0b10011001 ;51 brsh metka4 ;ïåðåéòè åñëè r16 >= 51 reti metka1: ldi r16, (1<<PORTB4)|(1<<PORTB3)|(1<<PORTB2)|(1<<PORTB1)|(1<<PORTB0) out PORTB, r16 reti metka2: ldi r16, (1<<PORTB3)|(1<<PORTB2)|(1<<PORTB1)|(1<<PORTB0) out PORTB, r16 reti metka3: ldi r16, (1<<PORTB2)|(1<<PORTB1)|(1<<PORTB0) out PORTB, r16 reti metka4: ldi r16, (1<<PORTB1)|(1<<PORTB0) out PORTB, r16 reti metka5: ldi r16, (1<<PORTB0) out PORTB, r16 reti не могу понять как правильно настроить ADCSRB под Atmega88 и как правильно прописать запуск Ацп в таймере это небольшой набросок мой программы
Компоновка ассемблерной программы с программой С++. Посчитать количество повторений первого элемента в пятисимвольном массиве. Инициализацию массива делаю в С++, дальше передаю указатель на массив в ассемблерную функцию и ожидаю получить результат(количество элементом массива эквивалентных первому). Не понимаю в чем ошибка, перепробовал уже всё что угодно. В одних случаях возвращает что-то вроде 6543, а сейчас возвращает "1". Прошу помощи. Ассемблерная программа .486 .model flat, stdcall option casemap:none .code F proc, arr:DWORD xor ebx,ebx xor ecx,ecx mov esi,0 mov eax, arr[0] mov cx, 5 start_loop: mov edx, arr[esi] cmp eax, edx jz M2 M1: inc esi loop start_loop jmp end_loop M2: add ebx,1 inc esi loop start_loop end_loop: mov eax,ebx RET F endp end Программа на С++: #include <iostream> #include <Windows.h> using namespace std; #define USINT unsigned short int unsigned short int arr[5]; unsigned short int num=5; unsigned short int number=0; extern "C" int _stdcall F(USINT*); int main() { SetConsoleCP(1251); SetConsoleOutputCP(1251); cout << "Введите элементы массива:" << endl; for (unsigned short int i = 0; i < 5; i++) { cout << i << ": "; cin >> arr; } number=0; number=F(arr); cout<<endl<<"Количество повторений первого элемента = "<<number<<endl; system("pause"); return 0; }