SOFTWAREENGINEERVLOG Telegram 2299
Forwarded from S0ER.Code
; проверка типа второго аргумента "b"
0x109706503 43 4c8b4520 REX.W movq r8, [rbp+0x20]
0x109706507 47 41f6c001 testb r8,0x1
0x10970650b 4b 0f8559000000 jnz 0x10970656a <+0xaa>
; само сложение
0x109706511 51 03cf addl rcx,rdi

; если переполнение, то переход
0x109706513 53 0f8055000000 jo 0x10970656e <+0xae>

; упаковка результата
0x109706519 59 48c1e120 REX.W shlq rcx, 32

; результат кладем в rax
0x10970651d 5d 488bc1 REX.W movq rax,rcx

; ====== эпилог ==========
0x109706520 60 488b4de8 REX.W movq rcx, [rbp-0x18]
0x109706524 64 488be5 REX.W movq rsp,rbp
0x109706527 67 5d pop rbp

0x109706528 68 4883f903 REX.W cmpq rcx,0x3
0x10970652c 6c 7f03 jg 0x109706531 <+0x71>
0x10970652e 6e c21800 ret 0x18

0x109706531 71 415a pop r10
0x109706533 73 488d24cc REX.W leaq rsp, [rsp+rcx*8]
0x109706537 77 4152 push r10
0x109706539 79 c3 retl

0x10970653a 7a 48ba0000000010000000 REX.W movq rdx,0x1000000000
0x109706544 84 52 push rdx
0x109706545 85 48bb107d7a0401000000 REX.W movq rbx,0x1047a7d10
0x10970654f 8f b801000000 movl rax,0x1
0x109706554 94 48bef911d866da2e0000 REX.W movq rsi,0x2eda66d811f9 ;; object: 0x2eda66d811f9 <NativeContext[280]>
0x10970655e 9e e89db146fb call 0x104b71700 (CEntry_Return1_ArgvOnStack_NoBuiltinExit) ;; near builtin entry
0x109706563 a3 eb82 jmp 0x1097064e7 <+0x27>
0x109706565 a5 90 nop


Как видите, здесь довольно длинный ASM-кусок, в котором я добавил пояснения, чтобы было понятно по смыслу, что происходит, само сложение выполняется одной командой addl, всё остальное — это подготовки и обработка исключений, давайте коротко подведём итоги:

👑 сначала идёт пролог — это стандартная часть, которая сохраняет значения регистров;
👑 далее идёт загрузка аргументов функции «a» и «b»;
👑 проверка, что загруженные аргументы — это числа;
👑 далее идёт распаковка (обратите внимание, что на самом деле распаковка "b" сделана раньше, чем реальная проверка типа, это спекулятивная оптимизация, которая требует отдельного рассмотрения, как и само понятие «распаковка»);
👑 делаем вычисление;
👑 проверяем, что всё ок;
👑 упаковываем результат;
👑 финальные проверки и эпилог.

Более детально каждую из частей мы рассмотрим в будущих статьях, а пока ставь лайк, если тема тебе интересна. Полный вариант статьи
Please open Telegram to view this post
VIEW IN TELEGRAM
👍50👀8🔥5👎1



tgoop.com/softwareengineervlog/2299
Create:
Last Update:

; проверка типа второго аргумента "b"
0x109706503 43 4c8b4520 REX.W movq r8, [rbp+0x20]
0x109706507 47 41f6c001 testb r8,0x1
0x10970650b 4b 0f8559000000 jnz 0x10970656a <+0xaa>
; само сложение
0x109706511 51 03cf addl rcx,rdi

; если переполнение, то переход
0x109706513 53 0f8055000000 jo 0x10970656e <+0xae>

; упаковка результата
0x109706519 59 48c1e120 REX.W shlq rcx, 32

; результат кладем в rax
0x10970651d 5d 488bc1 REX.W movq rax,rcx

; ====== эпилог ==========
0x109706520 60 488b4de8 REX.W movq rcx, [rbp-0x18]
0x109706524 64 488be5 REX.W movq rsp,rbp
0x109706527 67 5d pop rbp

0x109706528 68 4883f903 REX.W cmpq rcx,0x3
0x10970652c 6c 7f03 jg 0x109706531 <+0x71>
0x10970652e 6e c21800 ret 0x18

0x109706531 71 415a pop r10
0x109706533 73 488d24cc REX.W leaq rsp, [rsp+rcx*8]
0x109706537 77 4152 push r10
0x109706539 79 c3 retl

0x10970653a 7a 48ba0000000010000000 REX.W movq rdx,0x1000000000
0x109706544 84 52 push rdx
0x109706545 85 48bb107d7a0401000000 REX.W movq rbx,0x1047a7d10
0x10970654f 8f b801000000 movl rax,0x1
0x109706554 94 48bef911d866da2e0000 REX.W movq rsi,0x2eda66d811f9 ;; object: 0x2eda66d811f9 <NativeContext[280]>
0x10970655e 9e e89db146fb call 0x104b71700 (CEntry_Return1_ArgvOnStack_NoBuiltinExit) ;; near builtin entry
0x109706563 a3 eb82 jmp 0x1097064e7 <+0x27>
0x109706565 a5 90 nop


Как видите, здесь довольно длинный ASM-кусок, в котором я добавил пояснения, чтобы было понятно по смыслу, что происходит, само сложение выполняется одной командой addl, всё остальное — это подготовки и обработка исключений, давайте коротко подведём итоги:

👑 сначала идёт пролог — это стандартная часть, которая сохраняет значения регистров;
👑 далее идёт загрузка аргументов функции «a» и «b»;
👑 проверка, что загруженные аргументы — это числа;
👑 далее идёт распаковка (обратите внимание, что на самом деле распаковка "b" сделана раньше, чем реальная проверка типа, это спекулятивная оптимизация, которая требует отдельного рассмотрения, как и само понятие «распаковка»);
👑 делаем вычисление;
👑 проверяем, что всё ок;
👑 упаковываем результат;
👑 финальные проверки и эпилог.

Более детально каждую из частей мы рассмотрим в будущих статьях, а пока ставь лайк, если тема тебе интересна. Полный вариант статьи

BY S0ER


Share with your friend now:
tgoop.com/softwareengineervlog/2299

View MORE
Open in Telegram


Telegram News

Date: |

Activate up to 20 bots Earlier, crypto enthusiasts had created a self-described “meme app” dubbed “gm” app wherein users would greet each other with “gm” or “good morning” messages. However, in September 2021, the gm app was down after a hacker reportedly gained access to the user data. Among the requests, the Brazilian electoral Court wanted to know if they could obtain data on the origins of malicious content posted on the platform. According to the TSE, this would enable the authorities to track false content and identify the user responsible for publishing it in the first place. Add the logo from your device. Adjust the visible area of your image. Congratulations! Now your Telegram channel has a face Click “Save”.! Find your optimal posting schedule and stick to it. The peak posting times include 8 am, 6 pm, and 8 pm on social media. Try to publish serious stuff in the morning and leave less demanding content later in the day.
from us


Telegram S0ER
FROM American