Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на Assembler

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133

Открыть новую тему     Написать ответ в эту тему

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Обсуждаются все вопросы, связанные с программированием на Ассемблере как общего так и конкретного характера.
 
важное примечание
для тех кто считает, что здесь место халявных исполнений курсовых и лабораторных работ.
тут обычно помогают тем, кто сам хоть что-то пытается понять и сделать, но что-то не понимает, что-то не получается...
ведь ассемблер изучают и задачки на нём дают обычно не менеджерам по продажам и даже не всем физ.-мат. специальностям
вы сами избрали этот путь? вот и идите по нему сами, ножками... с ручками и с головой...
 
короче, тут не сборище придурков-альтруистов, которым нечего делать и они ждут-не дождутся когда вы их попросите
что-то сделать _за_ вас
если позарез надо и вы даже готовы заплатить, тогда вам сюда
удачи
 
некоторые ресурсы
http://www.wasm.ru/ Самый популярный русскоязычный ресурс. https://wasm.in/
Ассемблер - книги (ASM, Assembler)
 
Просьба все большие листинги оформлять тегом more.
 
если вам вдруг не отвечают или ответ вас не устраивает
и вообще полезно прочитать всем спрашивающим

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 01:42 29-11-2006 | Исправлено: akaGM, 17:44 11-06-2020
kkuuhhaa

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ne_viens
эт знаю, но оно работает вроде как медленнее, надо переводить в ulong

Всего записей: 131 | Зарегистр. 14-05-2008 | Отправлено: 00:11 16-12-2013
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Оно работает быстрее, так как не нарушает оптимизацию кода,
в отличии от asm вставки:
 
__asm {
    mov ecx, OFFSET mem
    xor eax, eax
L0:
    mov edx, [ecx+eax*4]
    bswap edx
    mov [ecx+eax*4], edx
    add eax, 1
    cmp eax, kol
    jb L0
}

Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 00:35 16-12-2013 | Исправлено: ne_viens, 00:36 16-12-2013
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ne_viens
 
а точно
add eax, 1
одинаково по скорости с
inc eax ?

Всего записей: 24120 | Зарегистр. 06-12-2002 | Отправлено: 02:24 16-12-2013
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
По Фогу (Agner Fog) add быстрее но больше места занимает.
Да и на грабли можно наступить, так как inc немодифицирует C флаг.
 
Забыл align в примере:
;...
align 16
L0:
;...

Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 09:53 16-12-2013
kkuuhhaa

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ne_viens
Со вставкой, пожалуй, ваша правда. Но тогда надо это оформить подпрограммой. Но тут опять пробелы у меня
.globl swapLong
swapLong:
??? Откуда брать параметры?
mov ecx, OFFSET mem
....
 
ret
Может проще разбить на пару потоков?

Всего записей: 131 | Зарегистр. 14-05-2008 | Отправлено: 10:26 16-12-2013
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
////////////////////////////////////////////////////////////////////////////////////////
__declspec(inline) void invertEndian(int* mem, int len)
{
    __asm {
        mov ecx, mem
        xor eax, eax
align 16
L0:
        mov edx, [ecx+eax*4]
        bswap edx
        mov [ecx+eax*4], edx
        add eax, 1
        cmp eax, len
        jb L0
    }
}
 
int _mem[] = {0x11223344, 0x55667788, 0x99aabbcc, 0xddeeff00};
////////////////////////////////////////////////////////////////////////////////////////
main()
{
    invertEndian(_mem, sizeof(_mem) / 4);
}
 
 
Но советую всё-таки пользоватся интринсиком в форе- мороки меньше, код быстрее и портабельнее (на x64, например) будет.

Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 12:08 16-12-2013 | Исправлено: ne_viens, 12:09 16-12-2013
JFK2005



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подходящей темы не нашёл. Вопрос из разряда "знал, да забыл".
 
Обязательно ли нужно добавлять релокейшены для 32-битных exe-файлов, которые запускаются под Windows Vista/7/8 ?
 
В этих системах есть механизм ASLR (Address Space Layout Randomization). То есть, по идее, при загрузке кода в память может быть выбран случайный адрес, и все абсолютные смещения придут в негодность. Какой флаг в заголовке exe задает принудительную загрузку по фиксированному адресу?
 
Например. Есть у нас exe-файл, одна из функций которого находится по абсолютному адресу 0x1589798. При загрузке exe по фиксированному значению адрес функции не изменится. Если бы это был не exe, а dll (которые могут грузиться по любому адресу), выделенные значения байтов изменились бы согласно релокейшену. Всегда ли необходимо прописывать релокейшены и для exe-файлов, если они запускаются под ОС выше Windows XP?
 
   

Всего записей: 2060 | Зарегистр. 26-10-2005 | Отправлено: 04:48 02-03-2014 | Исправлено: JFK2005, 05:22 02-03-2014
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ну, может быть, если exe архиважная, то надо ее собирать с релоками. ASLR ввели для того, чтобы злые хацкеры не знали, где код находится в памяти и несмогли бы добавить свой.
Если по умолчанию в последних версиях ml.exe это включено, то выключается с /link /FIXED:YES
Из уже собранного удаляется, если поставить галочку "Relocations stripped" в IMAGE_NT_HEADERS.Characteristics.
Это касается 64bit кода тоже, так как релоков пока никто там неотменял, по крайней мере для секции данных.

Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 13:27 02-03-2014
JFK2005



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ne_viens
Хорошо. А как дело обстоит со старыми программами? Будут ли они нормально выполняться под Vista/7/8, если удалить секцию релокейшенов? Или во всех старых программах флаг "Relocations stripped" уже установлен по умолчанию?

Всего записей: 2060 | Зарегистр. 26-10-2005 | Отправлено: 18:58 02-03-2014 | Исправлено: JFK2005, 19:04 02-03-2014
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Если удалить релоки, но флаг "Relocations stripped" не установить, exe не загрузится.
Есть прога LordPE, в которой можно посмотрть, что и как в exe файлах, а также поправить необходимое.
Релоки удалялись (не создавались?) в ехе файлах, которые с cl.exe до MSVC2005 (?) собирались. Борланд всегда с релоками собирал. MinGW- без релоков, итд.

Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 19:33 02-03-2014 | Исправлено: ne_viens, 19:56 02-03-2014
JFK2005



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ne_viens
LordPE устарела (например, она не поддерживает x64), я давно пользуюсь CFF Explorer'ом.
 
Посмотрел сейчас характеристики старой программы, собранной в VC++ 2005 - флаг "Relocations stripped" выставлен. Хотя релокейшены в .exe присутствуют. Видимо, VC++ 2005 выставляет этот флаг по умолчанию.  
 
 

Всего записей: 2060 | Зарегистр. 26-10-2005 | Отправлено: 20:34 02-03-2014
Astra55



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Существует ли возможность сброса флага Z командой из двух байт, желательно, не изменяя значений регистров? Пример для обратной операции:
cmp al, al всегда Z=1
????????? всегда Z=0

----------
Per warez ad scientiam

Всего записей: 11717 | Зарегистр. 16-05-2003 | Отправлено: 06:30 22-03-2014
Prober

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Astra55
Первое, что в голову пришло:
or esp, esp

Всего записей: 681 | Зарегистр. 01-11-2006 | Отправлено: 08:26 22-03-2014
Astra55



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Prober
То, что надо, респект! А то мне все доказывали что это невозможно

----------
Per warez ad scientiam

Всего записей: 11717 | Зарегистр. 16-05-2003 | Отправлено: 12:15 22-03-2014
Zloy_Gelud



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Доброго времени суток.
Есть такой кусок кода:

Код:
USE32
ORG     100h
     
PUSH    EBP
MOV     EBP, ESP
     
PUSH    DWORD [EBP + 36]
PUSH    DWORD [EBP + 32]
PUSH    DWORD [EBP + 28]
PUSH    DWORD [EBP + 24]
PUSH    DWORD [EBP + 20]
PUSH    DWORD [EBP + 16]
PUSH    DWORD [EBP + 12]
PUSH    DWORD [EBP + 8]
     
CALL    %u
     
POP     EBP
RETN

Можно ли как-то заменить эти 2 команды:

Код:
PUSH    DWORD [EBP + 36]
PUSH    DWORD [EBP + 32]

так чтобы в стек добавлялись действительные числа, а не целочисленные? Спасибо.

Всего записей: 3266 | Зарегистр. 30-05-2007 | Отправлено: 15:02 22-04-2014
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
.const
_p REAL4 11.111
_q REAL4 22.222
 
;...
fld _p
fstp    DWORD ptr[EBP + 36]
fld _q      
fstp    DWORD ptr[EBP + 32]
;...
 

Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 17:32 22-04-2014
Zloy_Gelud



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ne_viens -- спасибо, но в FASMe такой код не прошел.
Ладно, этот вопрос опустим. Возможно ли этот код переделать для работы в FASMe?

Код:
Func smethod_3($uShort)
    Local $num = BitAND($uShort, 0x1F) * 8
    Local $num2 = BitAND(BitShift($uShort, 5), 0x3F) * 4
    Local $num3 = BitShift($uShort, 11) * 8
    Return BitOR(BitOR(BitOR(-16777216, BitShift($num3, -0x10)), BitShift($num2, -8)), $num)
EndFunc   ;==>smethod_3

Всего записей: 3266 | Зарегистр. 30-05-2007 | Отправлено: 15:36 29-04-2014
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
section '.rdata' data readable
 
_p dt 11.111
_q dt 22.222  
 
section '.text' code readable executable
 
;...
    sub esp, 8
    fld [_q]
    fstp dword[esp+4]
    fld [_p]
    fstp dword[esp]
    push dword[ebp+28]
    push dword[ebp+24]
;...

 
 
Что это?
>Func smethod_3($uShort)
>    Local $num = BitAND($uShort, 0x1F) * 8
>...

Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 16:21 29-04-2014
Zloy_Gelud



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ne_viens

Цитата:
Что это?

Autoit код. Надо выполнить теже битовые опирации только на асме...

Всего записей: 3266 | Зарегистр. 30-05-2007 | Отправлено: 16:23 29-04-2014
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
На Матлаб больше похож.

Код:
smethod_3:
    mov edx, dword[esp+4] ;$uShort
    mov ecx, edx
 
    shl ecx, 5
    and ecx, 3Fh
    shl ecx, 2
    shr ecx, 8   ;num2
 
    shl edx, 11
    shl edx, 3   ;num3
    
    shr edx, 10h
    or edx, -16777216 ;0FF000000h
    or edx, ecx
    
    mov eax, dword[esp+4] ;$uShort
    and eax, 1Fh
    shl eax, 3   ;num
    
    or eax, edx
    ret 4

Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 17:13 29-04-2014
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на Assembler


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru