Делаю следующую операцию: Компилю сишный код в VS с генерацией асм сорцов, дальше полученый асм сорец пытаюсь собрать в MASM. Не компилится изза наличия строк: EXPORT |__$ArrayPad$| [ DATA ] Говорит - неизвестный символ. Что это за ArrayPad? Как сделать чтобы CL его не генерил, или как сделать чтобы ASM его хавал?
нет. Оно обычно перед импортами стоит типа вот так: Код (Text): EXPORT |__$ArrayPad$| [ DATA ] EXPORT |?WndProc@@YAJPAUHWND__@@IIJ@Z| ; WndProc IMPORT |SHCreateMenuBar| IMPORT |PostQuitMessage| IMPORT |DestroyWindow| IMPORT |SHHandleWMActivate| IMPORT |EndPaint| IMPORT |BeginPaint| IMPORT |SHHandleWMSettingChange| IMPORT |SendMessageW| IMPORT |DefWindowProcW| IMPORT |__GSHandlerCheck| IMPORT |__security_cookie| IMPORT |__security_check_cookie|
Тоже когда-то заинтересовало =) Инфа не проверенная, но насколько я понял, ArrayPad - константа, указывающая на сколько байт расширить стек для записи в него security cookie. На 32-битной платформе это должно быть всегда 4байтное значение, равное -4. Чтобы этот рантайм чек не производился, компелируй без опции /GS.
Все. Я нашел. Это вставляется когда включено "Buffer Security Checks". Если выключить, т.е. /GS- то эту хрень не вставляет. И все-таки, что это за макрос такой был? Имею в виду, как то можно было сделать чтобы MASM прохавал __$ArrayPad$ ? Типа там чо-то задефайнить, проинклюдить? И еще, нет ли способа заставить CL только генерить асм и не компилить obj? Чтобы время экономить.
Это не макрос. По идее определение должно быть в том же файле. Что-то вроде: __$ArrayPad$ = -4 ; size = 4 Думаю, больше сэкономишь, если не будешь искать таких способов =)) тем более что если уже сгенерился асм-листинг, то на запись объектника времени уйдет ничтожно мало.