Grazie Adrian e Peter! Ecco una versione modificata di Get-Bitness di Peter che 1) prende una lista di file da esaminare dalla pipeline, e 2) non muore se guarda una DLL non-. NET (ad esempio se guarda certe DLL C++) :
# example usage: dir *.exe,*.dll | Get-PEKind
function Get-PEKind {
Param(
[Parameter(Mandatory=$True,ValueFromPipeline=$True)]
[System.IO.FileInfo]$assemblies
)
Process {
foreach ($assembly in $assemblies) {
$peKinds = new-object Reflection.PortableExecutableKinds
$imageFileMachine = new-object Reflection.ImageFileMachine
try
{
$a = [Reflection.Assembly]::LoadFile($assembly.Fullname)
$a.ManifestModule.GetPEKind([ref]$peKinds, [ref]$imageFileMachine)
}
catch [System.BadImageFormatException]
{
$peKinds = [System.Reflection.PortableExecutableKinds]"NotAPortableExecutableImage"
}
$o = New-Object System.Object
$o | Add-Member -type NoteProperty -name File -value $assembly
$o | Add-Member -type NoteProperty -name PEKind -value $peKinds
Write-Output $o
}
}
}
sono nuovo di PowerShell, quindi questo non può essere un esempio di buone pratiche.
In alternativa, in base a https://stackoverflow.com/a/4719567/64257 potrebbe essere presente anche un pratico cmdlet Get-PEHeader nello PowerShell Community Extensions.
mi sento di raccomandare la ricerca attraverso l'ISA di per x86 e x64 e generare il set di istruzioni differenti tra i due. Poi cercherò i binari dll per quelle differenze e (si spera) che ti dia il risultato che desideri. Anche così sembra difficile, soggetto a errori, e non lo consiglierei. (Non so se la dll contiene questa informazione stessa) –
Stai cercando uno strumento o come farlo da solo a livello di programmazione? – pbz
Idealmente, fare clic destro/proprietà/dettagli, ma purtroppo :( –