- 01
 - 02
 - 03
 - 04
 - 05
 - 06
 - 07
 - 08
 - 09
 - 10
 - 11
 - 12
 - 13
 - 14
 - 15
 - 16
 - 17
 - 18
 - 19
 - 20
 - 21
 - 22
 - 23
 - 24
 - 25
 - 26
 - 27
 - 28
 - 29
 
                        TLS_Callback:
0051CAC3: push ebp
0051CAC4: mov ebp,esp
0051CAC6: cmp dword ptr ds:[51C01C],0
0051CACD: je expressor.51CAD6
0051CACF: pop ebp
0051CAD0: jmp dword ptr ds:[51C020]
0051CAD6: mov eax,dword ptr ss:[ebp + 8]
0051CAD9: xor ecx,ecx
0051CADB: inc ecx
0051CADC: test eax,eax
0051CADE: je expressor.51CAF3
0051CAE0: mov edx,dword ptr ds:[eax + 3C]
0051CAE3: mov edx,dword ptr ds:[edx + eax + 28]
0051CAE7: cmp byte ptr ds:[eax + edx],CC
0051CAEB: jne expressor.51CAF3
0051CAED: mov dword ptr ds:[51C038],ecx
0051CAF3: cmp dword ptr ds:[51C038],0
0051CAFA: mov dword ptr ds:[51C028],eax
0051CAFF: mov eax,dword ptr ss:[ebp + C]
0051CB02: mov dword ptr ds:[51C02C],eax
0051CB07: mov eax,dword ptr ss:[ebp + 10]
0051CB0A: mov dword ptr ds:[51C03C],ecx
0051CB10: mov dword ptr ds:[51C030],eax
0051CB15: jne expressor.51CB21
0051CB17: call expressor.51C81B
0051CB1C: mov dword ptr ds:[51C038],eax
0051CB21: pop ebp
0051CB22: ret C
                                 
        
            Что получает через mov eax,dword ptr ss:[ebp + C] и mov eax,dword ptr ss:[ebp + 10]?
        
        
это кстати не адреса? я в диалектах асма не оч
мне кажется это сегмент SS, и внутри него смещение 12 от регистра BP, не?
Ну обычно так раньше делали. Вот ты на стек поклал кучу переменных, потом поставил BP наверхс тека, и от него отсчитываешь.
как еще ты можешь обратиться к пятой-десятой локалке>? Только по сдвигу от BP
Слушайте, а есть примеры совершенно других подходов? вот например чтобы стека вообще не было
Или чтоб ырегистров не было (кажется в JVM и CLR так?)
там нет регистров
Грубо говоря, по-другому комп не сделать?
Есть много камней, где отсутствует хардварный стек, но есть link register, который надо сохранять в прологе и восстанавливать в эпилоге.
В памяти, что характерно.
Другими словами, стека нет, а фрейм всё равно есть.
Для оптимизации, в реализации верхушку можно в регистре хранить
Потом стали писать на сях, и передавать их через стек.
А потом пришел x64, и опять стали стараться все через регистры (бо их стало дохуя)
До изобретённого в масме INVOKE никаких параметров вообще не было.
Я сам ложил аргументы в регистры и вызывал INT
теперь вопрос: а были машины вообще без стека? НУ в машине питуринга же стека нет, нет?
Мы в этом купе пятнадцать лет втроем едем, я тебя по запятым опознать могу.
поскольку я этот код понимаю, он вероятно руками писаный
А вот если там кусочек других данных, то ты можешь получить совершенно неожиданные результаты
Впрочем, если компилятор сумеет доказать, что там NULL, то он просто выкинет весь твой код, да и всё
https://www.dialog.ua/images/content/5d08ae992e8b7e8c3855475d4dcad8d9.jpg