第一次遇到这种文件. 大S文件, 属于汇编代码文件? 该如何使用VC6处理并最终编译到项目中去?

解决方案 »

  1.   

    把S文件的内容贴出来看看(或贴图)
    建议用UltraEdit之类的16进制编辑器打开
      

  2.   

    LINUX下的GCC编译器是可以预处理汇编
      

  3.   

    ;# This is a hybrid assembly source file supporting both the
    ;# MASM as well as the GNU assembler in one file.
    ;#
    ;#
    ;# MASM:
    ;# ml.exe /c /nologo /Fo"call.obj" /W3 /Zi /errorReport:prompt /Ta"call.S"
    ;#
    ;# For enabling debug support use:
    ;# ml.exe /c /nologo /D"SYSTEM_LOG_DEBUG" /Fo"call.obj" /W3 /Zi /errorReport:prompt /Ta"call.S"
    ;#
    ;# GNU toolchain:
    ;# gcc -x assembler-with-cpp -s call.S -c
    ;#
    ;# For enabling debug support use:
    ;# gcc -x assembler-with-cpp -DSYSTEM_LOG_DEBUG -s call.S -c
      

  4.   

    上面的注释来自NSIS源码中的Call.S
      

  5.   

    文件名:sha1-sse2.S代码是使用INTEL SSE2指令, 对SHA1算法进行性能优化.是不是我还要找Intel的C++编译器来编译? 又该如何做呢? 找了半天, 可怜的百度世界, 居然找不到一个可用的Intel C++ 8.0可以下载和使用的.......// SHA-1 SSE2 implementation, (C) 2008 Alvaro Salmador ([email protected]), ported from Simon Marechal's SHA-1 MMX
    // SHA-1 MMX implementation, (C) 2005 Simon Marechal ([email protected])// This code computes two (with sse now four) SHA-1 digests at the same time. It
    // doesn't take care of padding (0x80 and size << 3), so make
    // sure the last input block is properly padded. Both 64-byte
    // input blocks must be (four bytes) interleaved.#if defined(__x86_64__) && defined(__APPLE__)
    #define MANGLE(x) x(%rip)
    #else
    #define MANGLE(x) x
    #endif#if defined(__i386__) || defined(__x86_64__).globl  shasse2_init;
    .globl  shasse2_ends;
    .globl  shasse2_data;
    .globl  shasse2_cpuid;.globl _shasse2_init;
    .globl _shasse2_ends;
    .globl _shasse2_data;
    .globl _shasse2_cpuid;.data
    #ifdef __APPLE__
    .align(12)
    #else
    .align(16)
    #endif
    const_init_a:
    .long 0x67452301
    .long 0x67452301
    .long 0x67452301
    .long 0x67452301
    const_init_b:
    .long 0xEFCDAB89
    .long 0xEFCDAB89
    .long 0xEFCDAB89
    .long 0xEFCDAB89
    const_init_c:
    .long 0x98BADCFE
    .long 0x98BADCFE
    .long 0x98BADCFE
    .long 0x98BADCFE
    const_init_d:
    .long 0x10325476
    .long 0x10325476
    .long 0x10325476
    .long 0x10325476
    const_init_e:
    .long 0xC3D2E1F0
    .long 0xC3D2E1F0
    .long 0xC3D2E1F0
    .long 0xC3D2E1F0
    const_stage0:
    .long 0x5A827999
    .long 0x5A827999
    .long 0x5A827999
    .long 0x5A827999
    const_stage1:
    .long 0x6ED9EBA1
    .long 0x6ED9EBA1
    .long 0x6ED9EBA1
    .long 0x6ED9EBA1
    const_stage2:
    .long 0x8F1BBCDC
    .long 0x8F1BBCDC
    .long 0x8F1BBCDC
    .long 0x8F1BBCDC
    const_stage3:
    .long 0xCA62C1D6
    .long 0xCA62C1D6
    .long 0xCA62C1D6
    .long 0xCA62C1D6
    const_ff00:
    .long 0xFF00FF00
    .long 0xFF00FF00
    .long 0xFF00FF00
    .long 0xFF00FF00
    const_00ff:
    .long 0x00FF00FF
    .long 0x00FF00FF
    .long 0x00FF00FF
    .long 0x00FF00FF#define ctxa %xmm0
    #define ctxb %xmm1
    #define ctxc %xmm2
    #define ctxd %xmm3
    #define ctxe %xmm4
    #define tmp1 %xmm5
    #define tmp2 %xmm6
    #define tmp3 %xmm7
    #define tmp4 ctxa
    #define tmp5 ctxb#ifdef __x86_64__
     #define edx_rsi %rsi
     #define ecx_rdx %rdx
     #define eax_rdi %rdi
    #else
     #define edx_rsi %edx
     #define ecx_rdx %ecx
     #define eax_rdi %eax
    #endif// movdqa movapd#define F0(x,y,z)       \
            movdqa   x, tmp2; \
            movdqa   x, tmp1; \
            pand   y, tmp2; \
            pandn  z, tmp1; \
            por    tmp2, tmp1; #define F1(x,y,z)       \
            movdqa   z, tmp1; \
            pxor   y, tmp1; \
            pxor   x, tmp1#define F2(x,y,z)       \
            movdqa   x, tmp1; \
            movdqa   x, tmp2; \
            pand   y, tmp1; \
            por    y, tmp2; \
            pand   z, tmp2; \
            por    tmp2, tmp1;
            
      

  6.   

            
    #define subRoundX(a, b, c, d, e, f, k, data)    \
            f(b,c,d);                               \
            movdqa   a, tmp2;                         \
            movdqa   a, tmp3;                         \
            paddd  tmp1, e;                         \
            pslld    $5, tmp2;                      \
            psrld   $27, tmp3;                      \
            por    tmp3, tmp2;                      \
            paddd  tmp2, e;                         \
            movdqa   b, tmp2;                         \
            pslld  $30, b;                          \
            paddd  MANGLE(k), e; \
            psrld  $2, tmp2;                        \
            por    tmp2, b;                         \
            movdqa   (data*16)(edx_rsi), tmp1;            \
            movdqa   tmp1, tmp2;                      \
            pand   MANGLE(const_ff00), tmp1;                \
            pand   MANGLE(const_00ff), tmp2;                \
            psrld  $8, tmp1;                        \
            pslld  $8, tmp2;                        \
            por    tmp2, tmp1;                      \
            movdqa   tmp1, tmp2;                      \
            psrld  $16, tmp1;                       \
            pslld  $16, tmp2;                       \
            por    tmp2, tmp1;                      \
            movdqa   tmp1, (data*16)(ecx_rdx);            \
            paddd  tmp1, e;#define subRoundY(a, b, c, d, e, f, k, data)    \
    movdqa ((data- 3)*16)(ecx_rdx), tmp1;       \
            pxor   ((data- 8)*16)(ecx_rdx), tmp1;       \
            pxor   ((data-14)*16)(ecx_rdx), tmp1;       \
            pxor   ((data-16)*16)(ecx_rdx), tmp1;       \
    \
            movdqa   tmp1, tmp2;                      \
            pslld    $1, tmp1;                      \
            psrld   $31, tmp2;                      \
            por    tmp2, tmp1;                      \
            movdqa  tmp1, (data*16)(ecx_rdx);            \
            paddd  tmp1, e;                         \
            f(b,c,d);                               \
            movdqa   a, tmp2;                         \
            movdqa   a, tmp3;                         \
            paddd  tmp1, e;                         \
            pslld    $5, tmp2;                      \
            psrld   $27, tmp3;                      \
            por    tmp3, tmp2;                      \
            paddd  tmp2, e;                         \
            movdqa   b, tmp2;                         \
            pslld  $30, b;                          \
            paddd  MANGLE(k), e;                            \
            psrld  $2, tmp2;                        \
            por    tmp2, b;
     
    .text// arg 1 (eax) (64bit: rdi): context (4*20 bytes) shasse2_init:
    _shasse2_init:        movdqa   MANGLE(const_init_a), ctxa
            movdqa   MANGLE(const_init_b), ctxb
            movdqa   MANGLE(const_init_c), ctxc
            movdqa   MANGLE(const_init_d), ctxd
            movdqa   MANGLE(const_init_e), ctxe        movdqa   ctxa, 0(eax_rdi)
            movdqa   ctxb, 16(eax_rdi)
            movdqa   ctxc, 32(eax_rdi)
            movdqa   ctxd, 48(eax_rdi)
            movdqa   ctxe, 64(eax_rdi)        ret// arg 1 (eax) (64bit: rdi): context (4*20 bytes)
    // arg 2 (edx) (64bit: rsi) : digests (4*20 bytes) shasse2_ends:
    _shasse2_ends:        movdqa    0(eax_rdi), ctxa
            movdqa   16(eax_rdi), ctxb
            movdqa   32(eax_rdi), ctxc
            movdqa   48(eax_rdi), ctxd
            movdqa   64(eax_rdi), ctxe        movdqa   MANGLE(const_ff00), tmp3
            movdqa   ctxa, tmp1
            movdqa   ctxb, tmp2
            pand   tmp3, ctxa
            pand   tmp3, ctxb
            movdqa   MANGLE(const_00ff), tmp3
            pand   tmp3, tmp1
            pand   tmp3, tmp2
            psrld  $8, ctxa
            psrld  $8, ctxb
            pslld  $8, tmp1
            pslld  $8, tmp2
            por    tmp1, ctxa
            por    tmp2, ctxb
            movdqa   ctxa, tmp1
            movdqa   ctxb, tmp2
            psrld  $16, ctxa
            psrld  $16, ctxb
            pslld  $16, tmp1
            pslld  $16, tmp2
            por    tmp1, ctxa
            por    tmp2, ctxb 
            movdqa   ctxa,  0(edx_rsi)
            movdqa   ctxb,  16(edx_rsi)        movdqa   MANGLE(const_ff00), tmp5
            movdqa   ctxc, tmp1
            movdqa   ctxd, tmp2
            movdqa   ctxe, tmp3
            pand   tmp5, ctxc
            pand   tmp5, ctxd
            pand   tmp5, ctxe
            movdqa   MANGLE(const_00ff), tmp5
            pand   tmp5, tmp1
            pand   tmp5, tmp2
            pand   tmp5, tmp3
            psrld  $8, ctxc
            psrld  $8, ctxd
            psrld  $8, ctxe
            pslld  $8, tmp1
            pslld  $8, tmp2
            pslld  $8, tmp3
            por    tmp1, ctxc
            por    tmp2, ctxd
            por    tmp3, ctxe
            movdqa   ctxc, tmp1
            movdqa   ctxd, tmp2
            movdqa   ctxe, tmp3
            psrld  $16, ctxc
            psrld  $16, ctxd
            psrld  $16, ctxe
            pslld  $16, tmp1
            pslld  $16, tmp2
            pslld  $16, tmp3
            por    tmp1, ctxc
            por    tmp2, ctxd
            por    tmp3, ctxe        movdqa   ctxc, 32(edx_rsi)
            movdqa   ctxd, 48(edx_rsi)
            movdqa   ctxe, 64(edx_rsi)        ret// arg 1 (eax) (64bit: rdi): context     (4*20 bytes)
    // arg 2 (edx) (64bit: rsi): input data (4*64 bytes)
    // arg 3 (ecx) (64bit: rdx): workspace  (1280 bytes) shasse2_data:
    _shasse2_data:        movdqa    0(eax_rdi), ctxa
            movdqa   16(eax_rdi), ctxb
            movdqa   32(eax_rdi), ctxc
            movdqa   48(eax_rdi), ctxd
            movdqa   64(eax_rdi), ctxe