- 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