ভার্চুয়ালবক্স, কীভাবে কোনও অতিথির কাছে নির্দিষ্ট সিপিইউ জোর করা যায়


14

ভার্চুয়ালবক্সে উইন্ডোজ 8 হোস্টে আমার এক্সপি গেস্ট রয়েছে। অতিথি প্রসেসরটিকে স্বচ্ছভাবে হোস্টের (i5 2500k) হিসাবে দেখায়। তবে বেশিরভাগ ইনস্টলার এই প্রসেসরগুলি স্বীকৃতি দেয় না এবং নন-সমর্থিত প্রসেসরের বিবরণী অব্যাহত রাখতে ব্যর্থ হয়।

অতিথিকে এই পুরানো প্রসেসর মনে করে বোকা দেওয়ার কোনও উপায় আছে কি? আমি যদি সঠিকভাবে পুনরায় কল করি VMWare এর একটি সিপিইউ মাস্কিং বৈশিষ্ট্য ছিল, ভার্চুয়ালবক্সে কি অনুরূপ কিছু আছে?


আপনি কোন সফ্টওয়্যার ইনস্টল করছেন যা সিপিইউ মডেলটি পরীক্ষা করে?
ডারথ অ্যান্ড্রয়েড

ডাবল এজেন্ট নিয়ন্ত্রণ, অরকা এবং উইক্স। এটি কোনও ভিবি 6 প্রকল্পের জন্য যা আমরা পুনরুদ্ধার করার চেষ্টা করছি।
অজানা

উত্তর:


19

ভার্চুয়ালবক্স এবং সিপিইউডির মূল বিষয়গুলি

VBoxInternal/CPUM/HostCPUIDআপনার ভার্চুয়াল মেশিনের এক্সট্রাডেট সেট করতে হবে । এটি অতিথিদের সিপিইউডির নির্দেশনার জন্য ভার্চুয়ালবক্সের প্রতিবেদনের কাস্টম ফলাফল তৈরি করবে । ইএএক্স নিবন্ধকের মানের উপর নির্ভর করে এই নির্দেশ প্রসেসরের তথ্য দেয় - বিক্রেতা, প্রকার, পরিবার, স্টেপিং, ব্র্যান্ড, ক্যাশে আকার, বৈশিষ্ট্যগুলি (এমএমএক্স, এসএসই, এসএসই 2, পিএই, এইচটিটি) ইত্যাদি আরও ফলাফল আপনি ম্যাঙ্গেল, অতিথিকে বোকা বানানোর সম্ভাবনা তত বেশি।

vboxmanage setextradataভার্চুয়াল মেশিনটি কনফিগার করতে আপনি কমান্ডটি ব্যবহার করতে পারেন । উদাহরণ স্বরূপ,

vboxmanage setextradata WinXP VBoxInternal/CPUM/HostCPUID/80000003/ebx 0x50202952

EAX এর সাথে 80000003₍₁₆₎ সেট করার সাথে কল করা হলে, সিপিইউডিকে EBX রেজিস্টারে 50202952₍₁₆₎ প্রদান করবে ₍₁₆₎ (এখন থেকে, হেক্সাডেসিমাল সংখ্যা 0xNN বা NNh হিসাবে লেখা হবে)

সিপিইউ বিক্রেতার স্ট্রিং সেট করা হচ্ছে

যদি EAX 0 হয় (বা এএমডি তে 80000000h), সিপিইউডিইড EBX, EDX, ECX (অর্ডারটি লক্ষ্য করুন) এ ASCII স্ট্রিং হিসাবে বিক্রেতাকে ফেরত দেয়। একটি এএমডি সিপিইউয়ের জন্য তারা এ জাতীয় চেহারা:

| Register | Value      | Description                    |
|----------|------------|--------------------------------|
| EBX      | 6874_7541h | The ASCII characters "h t u A" |
| ECX      | 444D_4163h | The ASCII characters "D M A c" |
| EDX      | 6974_6E65h | The ASCII characters "i t n e" |

( এএমডি সিপিইউইড স্পেসিফিকেশন , সাবকিশন "সিপিইউডিএন Fn0000_0000_E" থেকে নেওয়া )

আপনি যদি ইবিএক্স, ইডিএক্স এবং ইসিএক্সকে কনটেটেট করেন তবে আপনি পাবেন AuthenticAMD

আপনার যদি বাশ এবং traditionalতিহ্যবাহী ইউনিক্স ইউটিলিটিগুলি থাকে তবে আপনি সহজেই নীচের কমান্ডগুলি সহ বিক্রেতাকে সেট করতে পারেন:

vm='WinXP'  # UUID works as well
# The vendor string needs to have 12 characters!
vendor='AuthenticAMD'
if [ ${#vendor} -ne 12 ]; then
    exit 1
fi
ascii2hex() { echo -n 0x; od -A n --endian little -t x4 | sed 's/ //g'; }

registers=(ebx edx ecx)
for (( i=0; i<${#vendor}; i+=4 )); do
    register=${registers[$(($i/4))]}
    value=`echo -n "${vendor:$i:4}" | ascii2hex`
    # set value to an empty string to reset the CPUID, i.e.
    # value=""
    for eax in 00000000 80000000; do
        key=VBoxInternal/CPUM/HostCPUID/${eax}/${register}
        vboxmanage setextradata "$vm" $key $value
    done
done

সিপিইউ ব্র্যান্ডের স্ট্রিং সেট করা হচ্ছে

যদি EAX 80000002h, 80000003h, 80000004h হয়, সিপিইউডিএস EAX, EBX, ECX, EDX, মোট 3 * 16 = 48 টি অক্ষর রেজিস্টারে ব্র্যান্ড স্ট্রিংয়ের 16 ASCII অক্ষর প্রদান করে; স্ট্রিংটি নাল অক্ষর দিয়ে সমাপ্ত করা হয় । নোট করুন যে এই বৈশিষ্ট্যটি পেন্টিয়াম 4 প্রসেসরের সাথে প্রবর্তিত হয়েছিল। এইভাবে ব্র্যান্ড স্ট্রিংটি পেন্টিয়াম 4 প্রসেসরের দিকে নজর দিতে পারে:

| EAX Input Value | Return Values   | ASCII Equivalent |
|-----------------|-----------------|------------------|
| 80000002h       | EAX = 20202020h | "    "           |
|                 | EBX = 20202020h | "    "           |
|                 | ECX = 20202020h | "    "           |
|                 | EDX = 6E492020h | "nI  "           |
|-----------------|-----------------|------------------|
| 80000003h       | EAX = 286C6574h | "(let"           |
|                 | EBX = 50202952h | "P )R"           |
|                 | ECX = 69746E65h | "itne"           |
|                 | EDX = 52286D75h | "R(mu"           |
|-----------------|-----------------|------------------|
| 80000004h       | EAX = 20342029h | " 4 )"           |
|                 | EBX = 20555043h | " UPC"           |
|                 | ECX = 30303531h | "0051"           |
|                 | EDX = 007A484Dh | "☠zHM"           |
|-----------------|-----------------|------------------|

(থেকে নেওয়া রেফারেন্স প্রোগ্রামিং ইন্টেল আর্কিটেকচার নির্দেশনাবলী এক্সটেনশানগুলি , উপধারা 2.9, "CPUID নির্দেশ", টেবিল 2-30। ☠ হয় নাল অক্ষর (সংখ্যাগত মান 0)।)

যদি আপনি ফলাফলগুলি একসাথে রাখেন তবে আপনি পাবেন Intel(R) Pentium(R) 4 CPU 1500MHz☠

আপনার যদি বাশ এবং traditionalতিহ্যবাহী ইউনিক্স ইউটিলিটিগুলি থাকে তবে আপনি সহজেই নীচের কমান্ডগুলি সহ ব্র্যান্ডটি সেট করতে পারেন:

vm='WinXP'  # UUID works as well
# The brand string needs to have 47 characters!
# The null terminator is added automatically
brand='              Intel(R) Pentium(R) 4 CPU 1500MHz'
if [ ${#brand} -ne 47 ]; then
    exit 1
fi
ascii2hex() { echo -n 0x; od -A n --endian little -t x4 | sed 's/ //g'; }

eax_values=(80000002 80000003 80000004)
registers=(edx ecx ebx eax)
for (( i=0; i<${#brand}; i+=4 )); do
    eax=${eax_values[$((${i} / 4 / 4))]}
    register=${registers[$((${i} / 4 % 4 ))]}
    key=VBoxInternal/CPUM/HostCPUID/${eax}/${register}
    value=`echo -n "${brand:$i:4}" | ascii2hex`
    # set value to an empty string to reset the CPUID, i.e.
    # value=""
    vboxmanage setextradata "$vm" $key $value
done

আপনার যদি উইন্ডোজ কমান্ড প্রম্পট থাকে তবে আপনি ব্র্যান্ডটি চালিয়ে Intel(R) Core(TM)2 CPU 6600 @ 2.40 GHz1 এ সেট করতে পারেন :

set vm=your-vm-name-or-uuid
vboxmanage setextradata %vm% VBoxInternal/CPUM/HostCPUID/80000002/eax 0x65746e49
vboxmanage setextradata %vm% VBoxInternal/CPUM/HostCPUID/80000002/ebx 0x2952286c
vboxmanage setextradata %vm% VBoxInternal/CPUM/HostCPUID/80000002/ecx 0x726f4320
vboxmanage setextradata %vm% VBoxInternal/CPUM/HostCPUID/80000002/edx 0x4d542865
vboxmanage setextradata %vm% VBoxInternal/CPUM/HostCPUID/80000003/eax 0x43203229
vboxmanage setextradata %vm% VBoxInternal/CPUM/HostCPUID/80000003/ebx 0x20205550
vboxmanage setextradata %vm% VBoxInternal/CPUM/HostCPUID/80000003/ecx 0x20202020
vboxmanage setextradata %vm% VBoxInternal/CPUM/HostCPUID/80000003/edx 0x20202020
vboxmanage setextradata %vm% VBoxInternal/CPUM/HostCPUID/80000004/eax 0x30303636
vboxmanage setextradata %vm% VBoxInternal/CPUM/HostCPUID/80000004/ebx 0x20402020
vboxmanage setextradata %vm% VBoxInternal/CPUM/HostCPUID/80000004/ecx 0x30342e32
vboxmanage setextradata %vm% VBoxInternal/CPUM/HostCPUID/80000004/edx 0x007a4847

কম্পিউটার: ইন্টেল (আর) কোর (টিএম) 2 সিপিইউ 6600 @ 2.40 গিগাহার্টজ

1HostCPUID মান থেকে VirtualBox বাগ রিপোর্ট তোলা হয়েছিল # 7865


ধন্যবাদ। VERR_CFGM_INVALID_CHILD_PATH এর সাথে আমার ভিএম ভেঙে গেছে।
বেন সিনক্লেয়ার

1
সেডকে জি পতাকা সহ ব্যবহার করতে হবে:'s/ //g'
বেন সিনক্লেয়ার

1
কি দুর্দান্ত উত্তর! এবং কাবি লেকের সিপিইউগুলির আবির্ভাবের সাথে সাথে রেডমন্ডের একটি নির্দিষ্ট নীতি যা হ'ল উইন্ডোজ support সমর্থন করে না তাদের পক্ষে হঠাৎ করেই এটি আকর্ষণীয় হয়ে উঠেছে ... মনে হচ্ছে যে সমস্ত অনুপস্থিত রয়েছে তা "EAX = 1" কীভাবে সেট করবেন তার নির্দেশাবলী are প্রসেসরের তথ্য এবং বৈশিষ্ট্য বিটগুলি "তারা সাধারণ স্ট্রিং না হওয়ায় (কেবল সিপিইউ ব্র্যান্ডের সাথে সিপিইউ-জেড এখনও সিপিইউকে কেএল হিসাবে স্বীকৃতি দেয়); কেউ জানে?
sxc731

1
প্রতি forums.virtualbox.org/viewtopic.php?f=2&t=77211#p359428 , একটি ভাল (আরও সংক্ষিপ্ত, আরো সমর্থিত) এই মান নির্ধারণের প্রণালী করা যেতে পারে।
মার্ক অ্যামেরি

@ মার্কআমেরি, লিঙ্কটির জন্য ধন্যবাদ। এটি ব্র্যান্ডের পক্ষে সূক্ষ্ম কাজ করে তবে বিক্রেতার পক্ষে এতটা সূক্ষ্ম নয় কারণ বিক্রেতার EAX রেজিস্টারে সেট করা নেই এবং সাবকম্যান্ডের EAX নিবন্ধকের --cpuidজন্য একটি মান প্রয়োজন।
ক্রিশ্চিয়ান সিউপিতু

5

এখানে একটি পদ্ধতির সাহায্যে হোস্ট সিপিইউকে নির্দিষ্ট সিপিইউ হিসাবে সুনির্দিষ্টভাবে মাস্ক্রেডিংয়ের পরিবর্তে প্রয়োজনীয় সেটিংসের দ্বিতীয়-অনুমানের চেষ্টা করার অনুমতি দেয়। আপনাকে সেই হোস্ট সিপিইউতে ভার্চুয়ালবক্স চালিত কোনও মেশিনে অ্যাক্সেসের প্রয়োজন হবে যাতে আপনি এর cpuidরেজিস্টারগুলি ডাম্প করতে পারেন (মডেল হিসাবে আপনার আসল সিপিইউয়ের মতো যুক্তিযুক্ত কোনও স্থাপত্য চয়ন করা সম্ভবত সেরা)। যদি আপনার হাতে কোনও হাত না থাকে তবে আপনি চারপাশে জিজ্ঞাসা করতে পারেন (উদাহরণস্বরূপ আমি রেডডিতে সাফল্য পেয়েছি)।

  1. আপনি যে সিপিইউ অনুকরণ করতে চান তা থেকে একটি "মডেল" ফাইল তৈরি করুন:

    vboxmanage list hostcpuids > i7_6600U
    
  2. লক্ষ্য হোস্টে, আপনি যে ভিএমটি সংশোধন করতে চান তা চলমান নয় তা নিশ্চিত করুন; আপনি যদি সেক্ষেত্রে ব্যাকআপ নিতে চান।
  3. i7_6600Uআপনার ভিবিক্স ভিএম ( my_vm_nameএখানে) এর সংজ্ঞাটিতে মডেল ফাইল ( এখানে) লোড করতে নিম্নলিখিত স্ক্রিপ্টটি চালান :

    #!/bin/bash
    vm=my_vm_name
    model_file=i7_6600U
    
    egrep -e '^[[:digit:]abcdef]{8} ' $model_file |
    while read -r line; do
        leaf="0x`echo $line | cut -f1 -d' '`"
        # VBox doesn't like applying leaves between the below boundaries so skip those:
        if [[ $leaf -lt 0x0b || $leaf -gt 0x17 ]]; then
            echo "Applying: $line"
            vboxmanage modifyvm $vm --cpuidset $line
        fi
    done
  4. এটি হ'ল, আপনি এখন আপনার ভিএম চালাতে পারেন এবং মুখোশযুক্ত সিপিইউ উপভোগ করতে পারেন (দ্রষ্টব্য: আপনার কেবল একবার উপরের স্ক্রিপ্টটি একবার চালানো দরকার)।

আপনার যদি কখনও সিপিইউয়ের মুখোশটি রোলব্যাক করতে vboxmanage modifyvm $vm --cpuidremove $leafহয় তবে আপনি উপরের লুপের প্রতিটি পাতার জন্য ( man vboxmanageআপনার বন্ধু) ব্যবহার করতে পারেন ।

এটি আমার জন্য কয়েক মাস ধরে নির্বিঘ্নে কাজ করে চলেছে, একটি উবুন্টু 17.04 হোস্টে ভিবক্স 5.1.22 পরিচালিত একটি স্কাইলেকে এক (i7_6600U) হিসাবে একটি কাবি লেক সিপিইউ (i7_7500U) মাস্ক্রেড করে। পদ্ধতির কোনও হোস্ট ওএসে কাজ করা উচিত, আপনি সেই ওএসের জন্য উপরের ছোট্ট ব্যাশ স্ক্রিপ্টের সমতুল্য তৈরি করতে পারেন।


"সিপিইউ বিক্রেতার স্ট্রিং সেট করা" অংশটি সম্পর্কে, আমার একটি মন্তব্য আছে: আপনার অবশ্যই বিক্রেতার নামটি এএমডি সিপিইউতে "প্রমাণীকরণক্যাম" এবং ইনটেল সিপিইউতে "জেনুইনআইন্টেল" এ পরিবর্তন করতে হবে তা নিশ্চিত করতে হবে। আপনি যদি একটি এএমডি সিপিইউতে "জেনুইনআইন্টেল" ব্যবহার করেন তবে ভার্চুয়াল মেশিনটি সম্ভবত খুব সম্ভবত ভেঙে যাবে।
আবুলহোল

এই জন্য অনেক ধন্যবাদ! এটি আমার রাইজেন 00 77০০ কে তে একটি কবজির মতো কাজ করেছে। আমি উবুন্টু লাইভসিডি চালিয়ে, লাইভ এনভায়রনমেন্টে ভার্চুয়ালবক্স ইনস্টল করে এবং ভিবক্সম্যানেজ কমান্ড চালিয়ে সিপিইউডিডি পেতে একটি পুরানো এএমডি সকেট এসএফ 2 মাদারবোর্ড ব্যবহার করেছি। হোস্ট সাইডে, আমি লিনাক্সের জন্য উইন্ডোজ সাবসিস্টেমটি ইনস্টল করেছি যাতে আমি উইন্ডোজ 10 এ একটি বাশ প্রম্পট চালাতে পারি এবং আপনার ভাগ করা স্ক্রিপ্টটি চালাতে পারি। এখন আমি আমার উইন্ডোজ 7 ভিএম কে এই ভেবে ভাবাতে সক্ষম হয়েছি যে আমি একটি এ8-5600 কে চালাচ্ছি।
njbair

খুশী এটি আপনার জন্য কাজ করে! আমার পরিষ্কার করা উচিত ছিল যে এর কোনওটির জন্যই লিনাক্স হোস্টের প্রয়োজন নেই; এমনকি "মডেল" ফাইল সংগ্রহ না করে, কেবল এটির দরকার ভার্চুয়ালবক্স সেই মেশিনে চলছে। বাশ স্ক্রিপ্টটি জটিল দেখতে পারে তবে এটি হ'ল মডেল ফাইলের লাইনগুলি পড়া, এর মধ্যে পাতা ঝাঁকুনি ( 0000000bএবং 00000017অন্তর্ভুক্ত) এবং একে একে চালিয়ে দেওয়া vboxmanage modifyvm my_vm_name --cpuidset <line>যাতে এটি সহজেই হাতছাড়া হয়ে যায় কারণ এটি এক-অফ।
sxc731

কোনও বড় কথা নয়, আমি হোস্ট কম্পিউটারে যেভাবেই হোক ডাব্লুএসএল ইনস্টল করেছিলাম এবং উবুন্টু লাইভসিডিটি কেবল এটি ছিল কারণ এটি পুরানো এএমডি মাদারবোর্ড স্পিন করার দ্রুততম উপায় ছিল।
এনজেবায়ার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.