Dolphin
pop al
stosb
loop lp2
Dolphin
ну и в основном цикле не DX сохраняешь, а DL
Vyacheslav
Кстати, кто-нибудь знает, как такая защита называется?
0x5000: mov eax, xxxxxxxxh
0x5006: jmp 0x5002
0x5008: mov eax, yyyyyyyyh
0x500d: jmp 0x500a
И т. д.
Eugene
Eugene
Зачем такое нагромождение?
xor eax, eax ; лишнее
mov ax, [len_sm]
xor edx, edx ; лишнее
mov bx, 100
xor dx, dx
div bx
К тому же:
1. Введённая строка не преобразуется в число.
2. Зачем делить на 100, если вводится 2-значное число, которое явно не превышает 100? Если забить на проверку ввода, можно вообще схитрить: если нужен остаток, просто берём последние 2 цифры, если нужно частное - все, кроме 2-х последних. Никаких преобразований и делений :)
Из строки в число (без проверки корректности):
mov ax, [len_sm]
sub ax,'00'
xchg al,ah
aad ; теперь в ax 2-значное число
Eugene
mov [edi], dx
зачем в байт записывать слово, почему не просто dl ?
Dolphin
Зачем такое нагромождение?
xor eax, eax ; лишнее
mov ax, [len_sm]
xor edx, edx ; лишнее
mov bx, 100
xor dx, dx
div bx
К тому же:
1. Введённая строка не преобразуется в число.
2. Зачем делить на 100, если вводится 2-значное число, которое явно не превышает 100? Если забить на проверку ввода, можно вообще схитрить: если нужен остаток, просто берём последние 2 цифры, если нужно частное - все, кроме 2-х последних. Никаких преобразований и делений :)
Из строки в число (без проверки корректности):
mov ax, [len_sm]
sub ax,'00'
xchg al,ah
aad ; теперь в ax 2-значное число
зачем xchg? порядок же верный
Eugene
Нет. Например, "35". В ah пойдет 5, в al 3. А надо наоборот.
Dolphin
а при загрузке... справедливо
Dolphin
Зачем такое нагромождение?
xor eax, eax ; лишнее
mov ax, [len_sm]
xor edx, edx ; лишнее
mov bx, 100
xor dx, dx
div bx
К тому же:
1. Введённая строка не преобразуется в число.
2. Зачем делить на 100, если вводится 2-значное число, которое явно не превышает 100? Если забить на проверку ввода, можно вообще схитрить: если нужен остаток, просто берём последние 2 цифры, если нужно частное - все, кроме 2-х последних. Никаких преобразований и делений :)
Из строки в число (без проверки корректности):
mov ax, [len_sm]
sub ax,'00'
xchg al,ah
aad ; теперь в ax 2-значное число
>
aad ; теперь в ax 2-значное число
в AL, AH=0
Eugene
Ну раз ah=0, значит в ax.
Суть-то та же
Dolphin
:)
Eugene
Это 32-битный код, так что всё норм :)
Rigidus
смотря что реверсить, задавай вопрос
Rigidus
дизасм что показывает?
Rigidus
ты лучше так расскажи
Забанил бота
Anonymous
radare норм?
kitsu
Anonymous
Спс
Aiwan \ (•◡•) / _bot
Aiwan \ (•◡•) / _bot
#book Аблязов Руслан
fasm x16 x32 x64 OsDev
Отличное качество
Anonymous
18 года?)
Dolphin
11 же
Aiwan \ (•◡•) / _bot
18 года?)
Просто все что выше там скан, а это видимо цифровая версия
Eugene
Eugene
Eugene
Написано 2016, но может просто переиздание.
Eugene
У кого-то (Зубкова вроде) такая фигня. Книга года 2004-го, а продается чуть ли не 2018, хотя содержимое то же (по оглавлению ясно, что ничего нового).
Eugene
Конечно неправильно. EBX и пр. регистры имеют размерность 4 байта. Вам надо 1 байт читать, зачем все 4 ?
Либо заранее сбрасываем EBX в 0 и используем BL, либо используем movzx ebx,byte [ecx].
Eugene
Теперь второй момент. Никакого нуль-байта там нет. Там может быть только перевод строки (10), но и то только если юзер ввёл меньше EDX значащих символов.
Длина строки возвращается в EAX после системного вызова. Документацию читайте внимательно. Причём, размер этот будет включать в себя перевод строки (10), если он есть.
Eugene
При ошибке EAX=-1.
Т.е. нужно сравнить EAX с EDX. Если он меньше, то уменьшить EAX на 1, иначе проверить что находиться по адресу [ECX+EAX-1]. Если там 10, то уменьшить EAX.
Eugene
Либо просто использовать EAX как длину строки и заодно проверять (в цикле преобразования сроки в число) — не попалось ли 10.
Eugene
Главное проверить, чтобы длина строки была > 0, иначе получите почти бесконечный цикл.
Eugene
А вообще по-хорошему нужно проверять, является ли символ цифрой и есть ли вообще цифры (иначе пустая строка будет трактоваться как 0).
Anonymous
Подскажите пожалуйста, как слинковать динамическую библиотеку с основной программой не используя gcc? (nasm, ld, *nix 64)
Есть два файла, main.asm и lib.asm, делаю так:
nasm -f elf64 lib.asm -o lib.o
ld -shared lib.o -o lib.so
nasm -f elf64 main.asm -o main.o
ld lib.so main.o -o main
ls -la main
-rwxr-xr-x 1 admin admin 2440 ноя 24 13:10 main
./main
bash: ./main: Нет такого файла или каталога
Понимаю, что неправильно линкую - как статическую библиотеку, но не могу нагуглить нужных примеров как собирать, везде с gcc примеры, хотелось бы без gcc исключительно ld и nasm.
Нужно как-то указывать, что библиотека шаред и код в ней должен быть PIC?
Растолкуйте пожалуйста
Anonymous
objdump -tf main
main: формат файла elf64-x86-64
архитектура: i386:x86-64, флаги 0x00000112:
EXEC_P, HAS_SYMS, D_PAGED
начальный адрес 0x0000000000400268
SYMBOL TABLE:
0000000000400158 l d .interp 0000000000000000 .interp
0000000000400168 l d .hash 0000000000000000 .hash
...
Anonymous
ldd main
linux-vdso.so.1 (0x00007ffe413fc000)
/home/asm/lib.so (0x00007f3bacc65000)
Лев
Возможно ld нужен флаг о том где лежит разделяемый файл
Лев
Смысле откуда грузить
Anonymous
Rus Bashirov, [24.11.18 13:49]
ELF case, the dynamic linker which is stored in the .interp section of the program is executed) or directly by running:
/lib/ld-linux.so.* [OPTIONS] [PROGRAM [ARGUMENTS]]
Rus Bashirov, [24.11.18 13:49]
вот нашел
Rus Bashirov, [24.11.18 13:49]
но у меня нет /lib/ld-linux.so* )
Rus Bashirov, [24.11.18 13:49]
но как тогда работают динамические библиотеки ))
Rus Bashirov, [24.11.18 13:50]
ld --dynamic-linker /lib/ld-linux.so.2 -L . -l P a.out -o aaadyn
Rus Bashirov, [24.11.18 13:50]
вот вроде бы ключ
Rus Bashirov, [24.11.18 13:51]
тоесть получается --dynamic-linker /lib/ld-linux.so*, но ее нет %)
Anonymous
из флуда
Anonymous
секция .interp как видно и так появляется
Anonymous
заработало:
Anonymous
>$ nasm -f elf64 libP.asm -o libP.o
>$ ld -shared libP.o -o libP.so
>$ nasm -f elf64 main.asm -o main.o
>$ ld --dynamic-linker /lib64/ld-linux-x86-64.so.2 -L . -l P main.o -o main_dynamic
>$ file main_dynamic
main_dynamic: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, not stripped
Anonymous
но не совсем понятно до конца, почему во первых не сработала опция -L . не находит либу в текущей директории, приходится копировать libP.so в /lib
Anonymous
и второе, не понятно с опцией -l namespec, обязательно ли указывать пространство имен или можно указать как-то конкретный файл шаред либы
Anonymous
подскажите пожалуйста кто разбирается
Aiwan \ (•◡•) / _bot
Вот они, красавиц Ы. 😁
.....
Aiwan \ (•◡•) / _bot
Aiwan \ (•◡•) / _bot
Читайте закреп
Vyacheslav
Читайте закреп
Лучше б в описание группы эту инфу перенести
Aiwan \ (•◡•) / _bot
Нее, просто чувствую их недоумение. Пришли на канал а писать низя
Aiwan \ (•◡•) / _bot
И некрторые уходят
А самый шик был, когда я тут встретил человека с моего инста, 3 годами ниже. Просил решить за него задание (ввод 2-х чисел, если второе меньше 1-го, то вычесть, иначе сложить, вроде, и вывести в стдоут.) помочь-то помог, но с хитростью -- в середине проги отключались прерывания, в конце перед выходом -- переход в режим ожидания прерывания... Ну и преподу подсказал. ;-)
JeisonWi
Как-то не очень, имхо. Либо помогать, либо нет, но не так
Anonymous
kitsu
JeisonWi
Eugene
По поводу закрепа. Совершенно непонятно, что делать. Кому рассказывать? То ли админу в личку, то ли во флуд. И что дальше делать — сидеть и ждать или...?
Eugene
Зачем мне это обсуждать, если я хочу пройти контроль?
s54820
Eugene
Фразами типа «обсудить эту хуйню» вы привлекаете как раз школоту и прочий контингент низкого уровня развития, от которого всеми усилиями пытаетесь избавиться. Я не предлагаю задавать тон общения уровня 80-летних профессоров, но такие вещи в официальных сообщениях наводят на размышления.
Это ИМХО, а там уж решайте сами.
Churchill
Етить какой важный птиц
Все вокруг живут неправильно
Eugene
Churchill
Мое мнение- не флудить в профильных чатах