електр🟢нік ✙🟠рчбеч ඞ
так это у тебя пробежка по массиву фором, не?
електр🟢нік ✙🟠рчбеч ඞ
чета со строками мб
електр🟢нік ✙🟠рчбеч ඞ
не, с интами
Max
перед заходом в loop ebx обнуляется
електр🟢нік ✙🟠рчбеч ඞ
бля
kitsu
електр🟢нік ✙🟠рчбеч ඞ
int i=0;
int* a = 0x41cd40 // адрес начала массива
while(a[i] != 0){
i++;
}
електр🟢нік ✙🟠рчбеч ඞ
вот эквивалентный код
Max
Тогда что означает mov edx, dword [eax*4 - 1]? там же в edx тройка в результате копируется?
електр🟢нік ✙🟠рчбеч ඞ
нет бля
електр🟢нік ✙🟠рчбеч ඞ
по адресу у тебя может лежать любая хуйня
Max
так у меня там -1 лежит
електр🟢нік ✙🟠рчбеч ඞ
-1 это стандартное наебалово от дизассемблера
Max
о как
Max
ахаххахахаха
Max
тогда тут je может вообще не выполняться?
електр🟢нік ✙🟠рчбеч ඞ
может
Max
*активно прозревает*
електр🟢нік ✙🟠рчбеч ඞ
я думаю это структура данных какая-то
електр🟢нік ✙🟠рчбеч ඞ
спереди -1, сзади 0
електр🟢нік ✙🟠рчбеч ඞ
длина в ебх возвращается
Max
наверное. бинарь точно должен сравнить введенное с какой-то строкой, может, она в какой-то структуре данных/массиве
електр🟢нік ✙🟠рчбеч ඞ
это крякми?
Max
да
Max
ладно, спасибо за помощь. попытаюсь разобраться, посижу еще
електр🟢нік ✙🟠рчбеч ඞ
да
скинь плез, давно ничего не крякал
Max
Anonymous
https://youtu.be/5DlzeTcpXNQ
Eugene
Eugene
@susume_tomorrow , @Aiwan и другие 📢
електр🟢нік ✙🟠рчбеч ඞ
електр🟢нік ✙🟠рчбеч ඞ
mov rbx,rdx ; preserve rdx
xor rdx,rdx ; zero
push qword [rcx+8] ; 128bit hi
mov rax, [rsp] ; hi
div rbx ; rax=quot hi
mov [r8+8], rax
pop rdx ; hi
mov rax, [rcx] ; lo
div rbx
mov [r8], rax ; quot lo
xchg rax, rdx ; rem
32
Viktor
електр🟢нік ✙🟠рчбеч ඞ
електр🟢нік ✙🟠рчбеч ඞ
я пушу верх делимого и юзаю его дважды
Eugene
А зачем вообще стек юзать? Почему нельзя регистры? Так короче?
Eugene
первый его портит
Так, там остаток, который как раз и должен быть hi делимого ж.
Viktor
електр🟢нік ✙🟠рчбеч ඞ
Eugene
електр🟢нік ✙🟠рчбеч ඞ
ага, понял, моя ошибка
Eugene
Я делал такое раньше, сейчас адаптировал под 64 бита и входные/выходные параметрв, получилось 28 байт (сравнил с твоим — один в один, если исправить ошибки, только 2 инструкции местами поменяны 😁)
А в знаковом делении косяк, надо думать, как исправить :(
Aiwan \ (•◡•) / _bot
mov rax,-1
m1:
add rax, 1
adc qword[r8+8],0
sub qword [rcx],rdx
sbb qword [rcx+8],0
jnc m1
inc qword [rcx+8]
add [rcx],rdx
mov qword[r8],rax ;частное
mov rax,qword[rcx] ;остаток
31 байт беззнаковое
Aiwan \ (•◡•) / _bot
но медленный
Eugene
🤣 даже оооооочень медленный :))
Eugene
Кстати, никто не гарантирует, что в [r8+8] изначально будет 0 :)
Eugene
И ещё: inc не меняет CF.
Aiwan \ (•◡•) / _bot
Eugene
mov al,0ffh
inc al
Ага, а старшие части кто менять будет?
add rax,1 — 4 байта (на байт больше, чем inc rax)
Aiwan \ (•◡•) / _bot
Eugene
Aiwan \ (•◡•) / _bot
include 'win64ax.inc'
.data
val db 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,00h,00h,00h,00h,00h,00h,00h,00h
tchast rb 16
.code
start:
mov rcx,val
mov rdx,0FFFFFFFFFFFFFFFFh
mov r8,tchast
;-------------------------------------------
mov rax,-1
m1:
add rax, 1
adc qword[r8+8],0
sub qword [rcx],rdx
sbb qword [rcx+8],0
jnc m1
inc qword [rcx+8]
add [rcx],rdx
mov qword[r8],rax ;частное
mov rax,qword[rcx] ;остаток
;-------------------------------------------
;31 байт
invoke ExitProcess,0
.end start
Eugene
include 'win64ax.inc'
.data
val db 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,00h,00h,00h,00h,00h,00h,00h,00h
tchast rb 16
.code
start:
mov rcx,val
mov rdx,0FFFFFFFFFFFFFFFFh
mov r8,tchast
;-------------------------------------------
mov rax,-1
m1:
add rax, 1
adc qword[r8+8],0
sub qword [rcx],rdx
sbb qword [rcx+8],0
jnc m1
inc qword [rcx+8]
add [rcx],rdx
mov qword[r8],rax ;частное
mov rax,qword[rcx] ;остаток
;-------------------------------------------
;31 байт
invoke ExitProcess,0
.end start
Тут ответ 1, конечно работать будет 🙂
А если ответ > qword?
Aiwan \ (•◡•) / _bot
val db 00h,00h,00h,00h,00h,00h,00h,00h,01h,00h,00h,00h,00h,00h,00h,00h
mov rdx,0FFFFFFFFFFFFFFFAh
поменяй проверь
Eugene
Aiwan \ (•◡•) / _bot
1 целая и 5-6 остаток
Eugene
Вот так проверь :)
val db 00h,00h,00h,00h,00h,00h,00h,00h,01h,00h,00h,00h,00h,00h,00h,00h
mov rdx,1
Если дождёшься решения :))
Eugene
Будет 0 в качестве частного.
Eugene
Если всё остальное правильно написано
Aiwan \ (•◡•) / _bot
Вот так проверь :)
val db 00h,00h,00h,00h,00h,00h,00h,00h,01h,00h,00h,00h,00h,00h,00h,00h
mov rdx,1
Если дождёшься решения :))
это да , долго
Eugene
include 'win64ax.inc'
.data
val db 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,00h,00h,00h,00h,00h,00h,00h,00h
tchast rb 16
.code
start:
mov rcx,val
mov rdx,0FFFFFFFFFFFFFFFFh
mov r8,tchast
;-------------------------------------------
mov rax,-1
m1:
add rax, 1
adc qword[r8+8],0
sub qword [rcx],rdx
sbb qword [rcx+8],0
jnc m1
inc qword [rcx+8]
add [rcx],rdx
mov qword[r8],rax ;частное
mov rax,qword[rcx] ;остаток
;-------------------------------------------
;31 байт
invoke ExitProcess,0
.end start
Каспер жжот! Нашёл вирус в этом коде 🤣
Aiwan \ (•◡•) / _bot
Eugene
Троян!
Aiwan \ (•◡•) / _bot
делаю как могу, ну че ты
Aiwan \ (•◡•) / _bot
яженикаквы
Eugene
add rax,1 поставь и всё, будет на байт больше :))
Но решение забавное, конечно, учитывая, что я не выставлял ограничений на время выполнения 🤣
Aiwan \ (•◡•) / _bot
Eugene
Поэтому inc rax → add rax,1
Aiwan \ (•◡•) / _bot
Eugene