Fixes for Workstation 12 on Linux

This commit is contained in:
Dave Parsons 2015-09-14 13:51:31 +01:00
parent 24e7e4d5bb
commit 6c8b757129
3 changed files with 25 additions and 16 deletions

View File

@ -20,7 +20,11 @@ mkdir -p "./backup"
cp -v /usr/lib/vmware/bin/vmware-vmx ./backup/
cp -v /usr/lib/vmware/bin/vmware-vmx-debug ./backup/
cp -v /usr/lib/vmware/bin/vmware-vmx-stats ./backup/
cp -v /usr/lib/vmware/lib/libvmwarebase.so.0/libvmwarebase.so.0 ./backup/
if [ -d /usr/lib/vmware/lib/libvmwarebase.so.0/ ]; then
cp -v /usr/lib/vmware/lib/libvmwarebase.so.0/libvmwarebase.so.0 ./backup/
elif [ -d /usr/lib/vmware/lib/libvmwarebase.so/ ]; then
cp -v /usr/lib/vmware/lib/libvmwarebase.so/libvmwarebase.so ./backup/
fi
echo Patching...
python2 ./unlocker.py

View File

@ -18,7 +18,11 @@ echo Restoring files...
cp -v ./backup/vmware-vmx /usr/lib/vmware/bin/
cp -v ./backup/vmware-vmx-debug /usr/lib/vmware/bin/
cp -v ./backup/vmware-vmx-stats /usr/lib/vmware/bin/
cp -v ./backup/libvmwarebase.so.0 /usr/lib/vmware/lib/libvmwarebase.so.0/
if [ -d /usr/lib/vmware/lib/libvmwarebase.so.0/ ]; then
cp -v ./backup/libvmwarebase.so.0 /usr/lib/vmware/lib/libvmwarebase.so.0/
elif [ -d /usr/lib/vmware/lib/libvmwarebase.so/ ]; then
cp -v ./backup/libvmwarebase.so /usr/lib/vmware/lib/libvmwarebase.so/
fi
echo Removing backup files...
rm -rf ./backup

View File

@ -43,6 +43,7 @@ Offset Length struct Type Description
import os
import sys
import struct
import subprocess
if sys.version_info < (2, 7):
sys.stderr.write('You need Python 2.7 or later\n')
@ -197,7 +198,7 @@ def patchkeys(f, vmx, key, osname):
i += 1
return smc_old_memptr, smc_new_memptr
def patchsmc(name, osname):
def patchsmc(name, osname, so):
with open(name, 'r+b') as f:
# Read file into string variable
@ -259,7 +260,7 @@ def patchsmc(name, osname):
# Find matching RELA record in .rela.dyn in ESXi ELF files
# This is temporary code until proper ELF parsing written
if osname == 'vmkernel':
if so == True:
print 'Modifying RELA records from: ' + hex(smc_old_memptr) + ' to ' + hex(smc_new_memptr)
patchELF(f, smc_old_memptr, smc_new_memptr)
@ -333,6 +334,8 @@ def main():
else:
osname = os.uname()[0].lower()
vmx_so = False
# Setup default paths
if osname == 'darwin':
vmx_path = '/Applications/VMware Fusion.app/Contents/Library/'
@ -346,6 +349,11 @@ def main():
vmx = vmx_path + 'vmware-vmx'
vmx_debug = vmx_path + 'vmware-vmx-debug'
vmx_stats = vmx_path + 'vmware-vmx-stats'
vmx_version = subprocess.check_output(["vmware", "-v"])
if vmx_version.startswith('VMware Workstation 12'):
vmx_so = True
vmwarebase = '/usr/lib/vmware/lib/libvmwarebase.so/libvmwarebase.so'
else:
vmwarebase = '/usr/lib/vmware/lib/libvmwarebase.so.0/libvmwarebase.so.0'
elif osname == 'vmkernel':
@ -353,6 +361,7 @@ def main():
vmx = vmx_path + 'vmx'
vmx_debug = vmx_path + 'vmx-debug'
vmx_stats = vmx_path + 'vmx-stats'
vmx_so = True
vmwarebase = ''
libvmkctl = vmx_path + 'libvmkctl.so'
@ -370,19 +379,11 @@ def main():
print('Unknown Operating System: ' + osname)
return
# Test - remove
# osname = 'vmkernel'
# vmx = 'D:\\vmware\\test\\patched\\vmx'
# vmx_debug = 'D:\\vmware\\test\\patched\\vmx-debug'
# vmx_stats = 'D:\\vmware\\test\\patched\\vmx-stats'
# vmwarebase = ''
# libvmkctl = 'D:\\vmware\\test\\patched\\libvmkctl.so'
# Patch the vmx executables skipping stats version for Player
patchsmc(vmx, osname)
patchsmc(vmx_debug, osname)
patchsmc(vmx, osname, vmx_so)
patchsmc(vmx_debug, osname, vmx_so)
try:
patchsmc(vmx_stats, osname)
patchsmc(vmx_stats, osname, vmx_so)
except IOError:
pass