chapter16

hisun9發表於2024-11-08

segmentation.py引數

img

第一題

問題

先讓我們用一個小地址空間來轉換一些地址。這裡有一組簡單的引數和幾個不同的隨機種子。你可以轉換這些地址嗎?

segmentation.py -a 128 -p 512 -b 0 -l 20 -B 512 -L 20 -s 0
segmentation.py -a 128 -p 512 -b 0 -l 20 -B 512 -L 20 -s 1
segmentation.py -a 128 -p 512 -b 0 -l 20 -B 512 -L 20 -s 2

第一組引數:

img

第二組引數:

img

第三組引數:

img

附上自己的分析圖:

img

第二題

問題

現在,讓我們看看是否理解了這個構建的小地址空間(使用上面問題的引數)。段 0 中最高的合法虛擬地址是什麼?段 1 中最低的合法虛擬地址是什麼?在整個地址空間中,最低和最高的非法地址是什麼?最後,如何執行帶有-A 標誌的 segmentation.py 來測試你是否正確?

img

段0中最高的合法虛擬地址是19

段1中最低的合法虛擬地址是108

在整個地址空間中,最低的非法地址是20,最高的非法地址是107

在整個地址空間中,最低的法合地址是0,最高的合法地址是127

第三題

問題

假設我們在一個 128 位元組的實體記憶體中有一個很小的 16 位元組地址空間。你會設定什麼樣的基址和界限,以便讓模擬器為指定的地址流生成以下轉換結果:有效,有效,違規,違反,有效,有效?假設用以下引數:

segmentation.py -a 16 -p 128 
 -A 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 
 --b0 ? --l0 ? --b1 ? --l1 ?

按只有前兩個和最後兩個是有效的來考慮:

img

只有前兩個和最後兩個是有效的,所以界限為2

基址的選擇範圍很大,b0可以從0到124,b1可以從4到128

第四題

問題

假設我們想要生成一個問題,其中大約 90%的隨機生成的虛擬地址是有效的(即不產生段異常)。你應該如何配置模擬器來做到這一點?哪些引數很重要?

兩個界限暫存器的和佔有效地址空間的90%即可。而且隨機生成的虛擬地址數量要大,不然樣本太小

[whq@whq01 vm-segmentation]$ python segmentation.py -a 1k -n 100 -l 450 -L 480 -c
ARG seed 0
ARG address space size 1k
ARG phys mem size 16k

Segment register information:

  Segment 0 base  (grows positive) : 0x0000360b (decimal 13835)
  Segment 0 limit                  : 450

  Segment 1 base  (grows negative) : 0x00003262 (decimal 12898)
  Segment 1 limit                  : 480

Virtual Address Trace
  VA  0: 0x000001ae (decimal:  430) --> VALID in SEG0: 0x000037b9 (decimal: 14265)
  VA  1: 0x00000109 (decimal:  265) --> VALID in SEG0: 0x00003714 (decimal: 14100)
  VA  2: 0x0000020b (decimal:  523) --> SEGMENTATION VIOLATION (SEG1)
  VA  3: 0x0000019e (decimal:  414) --> VALID in SEG0: 0x000037a9 (decimal: 14249)
  VA  4: 0x00000322 (decimal:  802) --> VALID in SEG1: 0x00003184 (decimal: 12676)
  VA  5: 0x00000136 (decimal:  310) --> VALID in SEG0: 0x00003741 (decimal: 14145)
  VA  6: 0x000001e8 (decimal:  488) --> SEGMENTATION VIOLATION (SEG0)
  VA  7: 0x00000255 (decimal:  597) --> VALID in SEG1: 0x000030b7 (decimal: 12471)
  VA  8: 0x000003a1 (decimal:  929) --> VALID in SEG1: 0x00003203 (decimal: 12803)
  VA  9: 0x00000204 (decimal:  516) --> SEGMENTATION VIOLATION (SEG1)
  VA 10: 0x00000120 (decimal:  288) --> VALID in SEG0: 0x0000372b (decimal: 14123)
  VA 11: 0x00000305 (decimal:  773) --> VALID in SEG1: 0x00003167 (decimal: 12647)
  VA 12: 0x00000279 (decimal:  633) --> VALID in SEG1: 0x000030db (decimal: 12507)
  VA 13: 0x00000100 (decimal:  256) --> VALID in SEG0: 0x0000370b (decimal: 14091)
  VA 14: 0x000003a3 (decimal:  931) --> VALID in SEG1: 0x00003205 (decimal: 12805)
  VA 15: 0x000003ee (decimal: 1006) --> VALID in SEG1: 0x00003250 (decimal: 12880)
  VA 16: 0x0000033d (decimal:  829) --> VALID in SEG1: 0x0000319f (decimal: 12703)
  VA 17: 0x0000039b (decimal:  923) --> VALID in SEG1: 0x000031fd (decimal: 12797)
  VA 18: 0x0000013d (decimal:  317) --> VALID in SEG0: 0x00003748 (decimal: 14152)
  VA 19: 0x000002eb (decimal:  747) --> VALID in SEG1: 0x0000314d (decimal: 12621)
  VA 20: 0x00000398 (decimal:  920) --> VALID in SEG1: 0x000031fa (decimal: 12794)
  VA 21: 0x000002bc (decimal:  700) --> VALID in SEG1: 0x0000311e (decimal: 12574)
  VA 22: 0x000001e3 (decimal:  483) --> SEGMENTATION VIOLATION (SEG0)
  VA 23: 0x00000067 (decimal:  103) --> VALID in SEG0: 0x00003672 (decimal: 13938)
  VA 24: 0x000001bc (decimal:  444) --> VALID in SEG0: 0x000037c7 (decimal: 14279)
  VA 25: 0x00000271 (decimal:  625) --> VALID in SEG1: 0x000030d3 (decimal: 12499)
  VA 26: 0x000003a6 (decimal:  934) --> VALID in SEG1: 0x00003208 (decimal: 12808)
  VA 27: 0x000003dd (decimal:  989) --> VALID in SEG1: 0x0000323f (decimal: 12863)
  VA 28: 0x000001e8 (decimal:  488) --> SEGMENTATION VIOLATION (SEG0)
  VA 29: 0x00000376 (decimal:  886) --> VALID in SEG1: 0x000031d8 (decimal: 12760)
  VA 30: 0x0000010a (decimal:  266) --> VALID in SEG0: 0x00003715 (decimal: 14101)
  VA 31: 0x00000338 (decimal:  824) --> VALID in SEG1: 0x0000319a (decimal: 12698)
  VA 32: 0x00000231 (decimal:  561) --> VALID in SEG1: 0x00003093 (decimal: 12435)
  VA 33: 0x0000000e (decimal:   14) --> VALID in SEG0: 0x00003619 (decimal: 13849)
  VA 34: 0x000002e0 (decimal:  736) --> VALID in SEG1: 0x00003142 (decimal: 12610)
  VA 35: 0x00000198 (decimal:  408) --> VALID in SEG0: 0x000037a3 (decimal: 14243)
  VA 36: 0x0000034c (decimal:  844) --> VALID in SEG1: 0x000031ae (decimal: 12718)
  VA 37: 0x000002ac (decimal:  684) --> VALID in SEG1: 0x0000310e (decimal: 12558)
  VA 38: 0x00000001 (decimal:    1) --> VALID in SEG0: 0x0000360c (decimal: 13836)
  VA 39: 0x000001f9 (decimal:  505) --> SEGMENTATION VIOLATION (SEG0)
  VA 40: 0x00000378 (decimal:  888) --> VALID in SEG1: 0x000031da (decimal: 12762)
  VA 41: 0x000000f9 (decimal:  249) --> VALID in SEG0: 0x00003704 (decimal: 14084)
  VA 42: 0x0000014d (decimal:  333) --> VALID in SEG0: 0x00003758 (decimal: 14168)
  VA 43: 0x0000037b (decimal:  891) --> VALID in SEG1: 0x000031dd (decimal: 12765)
  VA 44: 0x000000c3 (decimal:  195) --> VALID in SEG0: 0x000036ce (decimal: 14030)
  VA 45: 0x00000245 (decimal:  581) --> VALID in SEG1: 0x000030a7 (decimal: 12455)
  VA 46: 0x000000f4 (decimal:  244) --> VALID in SEG0: 0x000036ff (decimal: 14079)
  VA 47: 0x000003de (decimal:  990) --> VALID in SEG1: 0x00003240 (decimal: 12864)
  VA 48: 0x00000336 (decimal:  822) --> VALID in SEG1: 0x00003198 (decimal: 12696)
  VA 49: 0x000001ca (decimal:  458) --> SEGMENTATION VIOLATION (SEG0)
  VA 50: 0x00000052 (decimal:   82) --> VALID in SEG0: 0x0000365d (decimal: 13917)
  VA 51: 0x00000147 (decimal:  327) --> VALID in SEG0: 0x00003752 (decimal: 14162)
  VA 52: 0x00000208 (decimal:  520) --> SEGMENTATION VIOLATION (SEG1)
  VA 53: 0x000003bb (decimal:  955) --> VALID in SEG1: 0x0000321d (decimal: 12829)
  VA 54: 0x0000006f (decimal:  111) --> VALID in SEG0: 0x0000367a (decimal: 13946)
  VA 55: 0x00000234 (decimal:  564) --> VALID in SEG1: 0x00003096 (decimal: 12438)
  VA 56: 0x000002d3 (decimal:  723) --> VALID in SEG1: 0x00003135 (decimal: 12597)
  VA 57: 0x00000230 (decimal:  560) --> VALID in SEG1: 0x00003092 (decimal: 12434)
  VA 58: 0x00000342 (decimal:  834) --> VALID in SEG1: 0x000031a4 (decimal: 12708)
  VA 59: 0x00000229 (decimal:  553) --> VALID in SEG1: 0x0000308b (decimal: 12427)
  VA 60: 0x000003da (decimal:  986) --> VALID in SEG1: 0x0000323c (decimal: 12860)
  VA 61: 0x00000269 (decimal:  617) --> VALID in SEG1: 0x000030cb (decimal: 12491)
  VA 62: 0x00000259 (decimal:  601) --> VALID in SEG1: 0x000030bb (decimal: 12475)
  VA 63: 0x000001c7 (decimal:  455) --> SEGMENTATION VIOLATION (SEG0)
  VA 64: 0x00000262 (decimal:  610) --> VALID in SEG1: 0x000030c4 (decimal: 12484)
  VA 65: 0x0000018a (decimal:  394) --> VALID in SEG0: 0x00003795 (decimal: 14229)
  VA 66: 0x0000024d (decimal:  589) --> VALID in SEG1: 0x000030af (decimal: 12463)
  VA 67: 0x00000129 (decimal:  297) --> VALID in SEG0: 0x00003734 (decimal: 14132)
  VA 68: 0x000000c1 (decimal:  193) --> VALID in SEG0: 0x000036cc (decimal: 14028)
  VA 69: 0x000000bf (decimal:  191) --> VALID in SEG0: 0x000036ca (decimal: 14026)
  VA 70: 0x00000273 (decimal:  627) --> VALID in SEG1: 0x000030d5 (decimal: 12501)
  VA 71: 0x000002a0 (decimal:  672) --> VALID in SEG1: 0x00003102 (decimal: 12546)
  VA 72: 0x000001e7 (decimal:  487) --> SEGMENTATION VIOLATION (SEG0)
  VA 73: 0x0000005b (decimal:   91) --> VALID in SEG0: 0x00003666 (decimal: 13926)
  VA 74: 0x00000307 (decimal:  775) --> VALID in SEG1: 0x00003169 (decimal: 12649)
  VA 75: 0x00000381 (decimal:  897) --> VALID in SEG1: 0x000031e3 (decimal: 12771)
  VA 76: 0x000003b1 (decimal:  945) --> VALID in SEG1: 0x00003213 (decimal: 12819)
  VA 77: 0x0000035e (decimal:  862) --> VALID in SEG1: 0x000031c0 (decimal: 12736)
  VA 78: 0x00000397 (decimal:  919) --> VALID in SEG1: 0x000031f9 (decimal: 12793)
  VA 79: 0x000003b1 (decimal:  945) --> VALID in SEG1: 0x00003213 (decimal: 12819)
  VA 80: 0x00000229 (decimal:  553) --> VALID in SEG1: 0x0000308b (decimal: 12427)
  VA 81: 0x00000190 (decimal:  400) --> VALID in SEG0: 0x0000379b (decimal: 14235)
  VA 82: 0x000002d2 (decimal:  722) --> VALID in SEG1: 0x00003134 (decimal: 12596)
  VA 83: 0x0000011a (decimal:  282) --> VALID in SEG0: 0x00003725 (decimal: 14117)
  VA 84: 0x0000033f (decimal:  831) --> VALID in SEG1: 0x000031a1 (decimal: 12705)
  VA 85: 0x00000365 (decimal:  869) --> VALID in SEG1: 0x000031c7 (decimal: 12743)
  VA 86: 0x00000394 (decimal:  916) --> VALID in SEG1: 0x000031f6 (decimal: 12790)
  VA 87: 0x0000025b (decimal:  603) --> VALID in SEG1: 0x000030bd (decimal: 12477)
  VA 88: 0x000003cc (decimal:  972) --> VALID in SEG1: 0x0000322e (decimal: 12846)
  VA 89: 0x00000251 (decimal:  593) --> VALID in SEG1: 0x000030b3 (decimal: 12467)
  VA 90: 0x000001cd (decimal:  461) --> SEGMENTATION VIOLATION (SEG0)
  VA 91: 0x000002a4 (decimal:  676) --> VALID in SEG1: 0x00003106 (decimal: 12550)
  VA 92: 0x000003fc (decimal: 1020) --> VALID in SEG1: 0x0000325e (decimal: 12894)
  VA 93: 0x000003aa (decimal:  938) --> VALID in SEG1: 0x0000320c (decimal: 12812)
  VA 94: 0x0000032c (decimal:  812) --> VALID in SEG1: 0x0000318e (decimal: 12686)
  VA 95: 0x00000054 (decimal:   84) --> VALID in SEG0: 0x0000365f (decimal: 13919)
  VA 96: 0x00000273 (decimal:  627) --> VALID in SEG1: 0x000030d5 (decimal: 12501)
  VA 97: 0x000001f2 (decimal:  498) --> SEGMENTATION VIOLATION (SEG0)
  VA 98: 0x00000285 (decimal:  645) --> VALID in SEG1: 0x000030e7 (decimal: 12519)
  VA 99: 0x00000361 (decimal:  865) --> VALID in SEG1: 0x000031c3 (decimal: 12739)

第五題

問題

你可以執行模擬器,使所有虛擬地址無效嗎?怎麼做到?

讓兩個界限均為0即可

img