Determine se o executável é uma janela nativa ou com o cygwin1.dll

1

Como posso determinar (em um script python ou qualquer outro ambiente de script) se um programa que eu tenho que chamar é um executável nativo do Windows ou compilado com cygwin1.dll. Eu estou dentro do ambiente cygwin para isso.

    
por Ravi 12.11.2017 / 17:42

2 respostas

2

Se você estiver dentro do ambiente cygwin, você pode usar o comando ldd , ele retornará as dependências de um executável, veja:

  • Dependências do ls.exe , o cygwin1.dll é uma dependência
    $ ldd /bin/ls.exe
            ntdll.dll => /mnt/c/WINDOWS/SYSTEM32/ntdll.dll (0x7ffd413d0000)
            KERNEL32.DLL => /mnt/c/WINDOWS/System32/KERNEL32.DLL (0x7ffd40af0000)
            KERNELBASE.dll => /mnt/c/WINDOWS/System32/KERNELBASE.dll (0x7ffd3e570000)
            cygintl-8.dll => /usr/bin/cygintl-8.dll (0x3e8b40000)
            cygwin1.dll => /usr/bin/cygwin1.dll (0x180040000)
            cygiconv-2.dll => /usr/bin/cygiconv-2.dll (0x3f2300000)
  • Dependências de C: /Windows/System32/control.exe , cygwin1.dll não é uma dependência
    $ ldd c:/Windows/System32/control.exe
            ntdll.dll => /mnt/c/WINDOWS/SYSTEM32/ntdll.dll (0x7ffd413d0000)
            KERNEL32.DLL => /mnt/c/WINDOWS/System32/KERNEL32.DLL (0x7ffd40af0000)
            KERNELBASE.dll => /mnt/c/WINDOWS/System32/KERNELBASE.dll (0x7ffd3e570000)
            ADVAPI32.dll => /mnt/c/WINDOWS/System32/ADVAPI32.dll (0x7ffd40d30000)
            msvcrt.dll => /mnt/c/WINDOWS/System32/msvcrt.dll (0x7ffd40520000)
[...]

Você também pode executar a seguinte linha:

ldd $PROGRAM | grep cygwin1.dll | wc -l

Ele retornará 1 no caso de $ PROGRAM conter uma dependência do cygwin1.dll

    
por 13.11.2017 / 01:09
1

Use a ferramenta shell 'cygpath' para encontrar o caminho CHEIO do estilo cygwin do seu executável. Em seguida, detecte com o que esse caminho começa.

Eu não tenho cygwin para testar isso; portanto, nenhum exemplo.

    
por 12.11.2017 / 21:01