Компилировать 64-битный глобальный сборник сборки с MSVC2012
Я хотел бы изменить некоторые контурные строки из кода С++, сгенерированного MSVC. Причина, по которой я хочу это сделать, можно найти здесь Разница в производительности между MSVC и GCC для высоко оптимизированного кода матричной матрицы
Итак, я попытался ром masm с выходом сборки, но он получил кучу ошибок. Вместо этого я просто попробовал пример "привет мир".
include <stdio.h>
int main() {
printf("asdf\n");
}
Скомпилируйте его в 64-битном режиме с помощью /FA/O 2... см. ниже
Когда я запускаю ml64/c Source.asm, я получаю следующую ошибку:
Source.asm(35) : error A2006:undefined symbol : FLAT
Source.asm(17) : error A2006:undefined symbol : $LN3
Source.asm(18) : error A2006:undefined symbol : $LN3
Проведя слишком много времени, я нашел эти два потока http://social.microsoft.com/Forums/en-US/e0e541d9-5421-4297-8018-7c6a0f12ae62/compile-assembly-generated-by-cl?forum=whatforum и http://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/4aad9e70-6bb8-4622-a5d9-a3b07b51fc7f/c-compiler-creates-assembler-directives-that-ml64-doesnt-understand?forum=windowssdk, где говорится в Microsoft
Прежде чем была предпринята работа по настройке x64 с помощью компилятора Microsoft C/С++, мы сделали вызов больше не поддерживать сборку файлов сгенерированных C/С++. Другими словами, файлы листинга предназначены только для информационных целей.
Может ли кто-нибудь объяснить другой метод генерации кода сборки из кода С++ в MSVC2012, чтобы я мог модифицировать несколько строк, а затем перекомпилировать/собрать его?
Edit: Вот еще несколько полезных комментариев проблема с cl.exe и ml.exe и MS Visual Studio 2010 как использовать сгенерированный файл .asm
Вот вывод сборки
; Listing generated by Microsoft (R) Optimizing Compiler Version 17.00.50727.1
;include listing.inc
INCLUDELIB OLDNAMES
PUBLIC [email protected][email protected][email protected] ; `string'
EXTRN __imp_printf:PROC
EXTRN __security_check_cookie:PROC
; COMDAT [email protected][email protected][email protected]
CONST SEGMENT
[email protected][email protected][email protected] DB 'asdf', 0aH, 00H ; `string'
CONST ENDS
PUBLIC main
; COMDAT pdata
pdata SEGMENT
$pdata$main DD imagerel $LN4
DD imagerel $LN4+24
DD imagerel $unwind$main
pdata ENDS
; COMDAT xdata
xdata SEGMENT
$unwind$main DD 010401H
DD 04204H
xdata ENDS
; Function compile flags: /Ogtpy
; COMDAT main
_TEXT SEGMENT
main PROC ; COMDAT
; Line 2
$LN4:
sub rsp, 40 ; 00000028H
; Line 3
lea rcx, OFFSET FLAT:[email protected][email protected][email protected]
call QWORD PTR __imp_printf
; Line 4
xor eax, eax
add rsp, 40 ; 00000028H
ret 0
main ENDP
_TEXT ENDS
END