Commit Graph

3717 Commits

Author SHA1 Message Date
Stanislav Shwartsman
7e909a6fa5 rename CPUID flags to match leaf numbers 2023-10-07 18:10:20 +03:00
Shwartsman
6307786ded automatically determine MCE/MCA CPUID flags 2023-10-07 01:51:18 +03:00
Shwartsman
6d83b5239e another code duplication fix in CPUDB code 2023-10-07 01:36:05 +03:00
Shwartsman
20dfe7c7d0 improve comment 2023-10-07 01:09:22 +03:00
Shwartsman
672c93c7c4 reduce code duplication using new CPUID methods 2023-10-07 01:02:39 +03:00
Shwartsman
5fc6302b1b add one more CPUID method for future use + fix compilation after prev commit 2023-10-07 00:10:18 +03:00
Shwartsman
f50419429d Fix code duplication for CPUID ECX leaf 0x1, implement with common function for all CPUs 2023-10-06 22:53:30 +03:00
Dreg
86eff7597d
add iodebug support for all rings complement #64 (#66)
This PR is for "I/O Interface to Bochs Debugger" from ring3 (port range:
**0x8A00 - 0x8A01**)

PR #64 was for E9 HACK (port **0xE9**)

By enabling the iodebug's 'all_rings' option, you can utilize the port
I/O Interface to Bochs Debugger from ring3. This PR allows the code
running inside Bochs (ring3) to monitor memory ranges, trace individual
instructions, and observe register values during execution.


https://bochs.sourceforge.io/doc/docbook/development/debugger-advanced.html

IMO very useful for:

- user-mode sandbox (ex Cuckoo)
- malware analysis
- API/SYSCALL hook/monitor from ring3
- automation + instrumentation from user mode code
...

A complement for PR #64

**This PR is 100% backward compatibility**

![IODEBUG ALL
RINGS](https://github.com/bochs-emu/Bochs/assets/9882181/6308ad0f-c189-43f3-a92b-dccde3542ad6)

btw, @stlintel I'm not certain about:
- if misc is the ideal location for this.. should I create a new
iodebug-option for this?
- should I remove the #if in 'new bx_param_bool_c'?
- the new .bochsrc entry makes sense for you?
2023-08-27 18:34:01 +02:00
Dreg
da43cc4580
add port e9 hack support for all rings (#64)
By enabling the 'all_rings' option, you can utilize the port e9 hack
from ring3

IMO very useful for:
- user-mode sandbox (ex Cuckoo)
- malware analysis
- API/SYSCALL logger with a simple hook from ring3
- automation + instrumentation from user mode code
- ...

So yes, from this PR a user-mode-sandbox can display on the console of
the system running Bochs anything that is written to 0xE9 port


![porte9hackallrings](https://github.com/bochs-emu/Bochs/assets/9882181/ddbca3fa-729b-4a3e-95ad-078e44c7a17a)

**This PR is 100% backward compatibility**

btw, @stlintel I'm not certain if **bochs/config.cc** is the ideal
location to define **bool port_e9_hack_all_rings** (unmapped io/dev is
better?)
2023-08-26 18:37:55 +03:00
Stanislav Shwartsman
253882589d extend cpuid enums with new bits announced in Intel SDM 2023-08-20 20:30:01 +03:00
Stanislav Shwartsman
1dcae848d7 change nullptr to NULL to help some old hosts not supporting C++ standard 2023-08-20 19:40:08 +03:00
Stanislav Shwartsman
6481d24e06 Another cleaner way to implemented fix by rei141
from Fixes in VM Entry Checks for Guest Segment Registers #51

Correction in checks for Code Segment (CS):
Previously, the DPL of CS was incorrectly compared with its own RPL.
According to Intel SDM, Vol. 3C, Chapter 27.3.1.2, for non-conforming code segments (type 9 or 11), the DPL of CS should be equal to the DPL of SS.
And for conforming code segments (type 13 or 15), the DPL of CS cannot be greater than the DPL of SS.

This way VMCS is not accessed multiple times which is important for some usages
2023-08-20 19:33:37 +03:00
Stanislav Shwartsman
58c047c6d6 Merge part of PR by rei141
Fixes in VM Entry Checks for Guest Segment Registers #51

Correction in Type range checks for DS, ES, FS, GS:
The original code erroneously applied the check for types less than 11, excluding types equal to 11.
This is not in accordance with Intel SDM, Vol. 3C, Chapter 27.3.1.2, which states that the check should include types equal to or less than 11.
This fix corrects this by including types equal to or less than 11 in the check.
2023-08-20 18:52:53 +03:00
Dreg
244033e234
improvement of the magic breakpoints fix #55 (#58) 2023-08-20 18:21:16 +03:00
disba1ancer
c11006ad51 Fixed instruction pointer truncation in gdbstub 2023-05-25 00:00:24 +03:00
Shwartsman
bd51ec5f83 fixed SF #1456 Bochs does not handle NMI blocking correctly when running virtual machines 2023-04-08 08:36:28 +03:00
Stanislav Shwartsman
e2f4eff91a fixed compilation of instrumentation examples with debugger OFF 2023-04-06 22:18:01 +03:00
Julien Freche
29f3e4a455 cpudb: extend strings that are too small 2023-02-22 12:03:02 -08:00
quirck
bee4cefb9e Check breakpoints before icount guard 2022-11-13 22:24:37 +03:00
Stanislav Shwartsman
7562731dca a little coding style unification 2022-10-08 20:35:36 +03:00
Stanislav Shwartsman
0e4524f38f Implemented CMPccXADD instructions 2022-10-08 20:04:22 +03:00
Stanislav Shwartsman
aa84121ede changes (c) date 2022-10-02 23:26:57 +03:00
Stanislav Shwartsman
c47b5ff5cb extract IFMA52 code to separate file 2022-10-02 23:24:00 +03:00
Stanislav Shwartsman
63ed447717 fixed compilation 2022-10-02 23:09:41 +03:00
Stanislav Shwartsman
4aed72e0ef fix issue with AVX IFMA when EVEX is not compiled in 2022-10-02 23:07:05 +03:00
Stanislav Shwartsman
a56144833a add support for AVX encoded VNNI INT8 extensions 2022-10-02 23:00:46 +03:00
Stanislav Shwartsman
3a20495db8 implemented WRMSRNS extension - Non Serializing version of WRMSR opcode 2022-10-02 22:16:02 +03:00
Stanislav Shwartsman
9f76eaacea implemented AVX IFMA instructions 2022-10-02 22:08:20 +03:00
Stanislav Shwartsman
d1737638ec add CPUID definitions disclosed in recent Intel SDM 2022-10-01 14:11:45 +03:00
Stanislav Shwartsman
b75fcc4535 updates to cpuid.h with most recent CPUID bit definitions 2022-08-26 22:31:23 +03:00
Stanislav Shwartsman
1e4f1624c8 remove trailing whitespace from source files 2022-08-23 21:46:04 +03:00
Satoshi Tanda
30ef7f4842
Fix dbg_xlate_linear2phy for NPT (#30) 2022-08-22 07:20:47 +03:00
Stanislav Shwartsman
fac15a7d03 updates to MTF code:
if VMEntry delivered an event of event happen right after VMEntry - MTF becomes pending immediatelly
2022-08-16 21:37:36 +03:00
Stanislav Shwartsman
b946570838 implemented VMX Monitor Trap Flag handling 2022-08-16 21:17:05 +03:00
Stanislav Shwartsman
180c1f09d5 fixed compilation 2022-08-14 21:18:25 +03:00
Stanislav Shwartsman
c9d8413422 allow TLB caching of SPP paging writes
it is possible that SPP-protected subpage block is allowing write but all others are not.
the TLB entry cannot be cached as writeOK based on SPP subblock check
2022-08-14 21:09:18 +03:00
Stanislav Shwartsman
97a2cdd85f update VMEXIT reasons according to published docs
update list of trap-like VMEXITs
2022-08-13 23:25:10 +03:00
Stanislav Shwartsman
df849619be more SPP limitations 2022-07-31 22:07:16 +03:00
Stanislav Shwartsman
f052c0f5b2 - VMX: Implemented missing SPP Misconfiguration condition (odd bits of SPP PTE entry are reserved)
- VMX: Fix SPP walk and VMCS access memory type to WB (match memory type listed in IA32_VMX_BASIC MSR)
2022-07-31 19:57:38 +03:00
Stanislav Shwartsman
13aa25919a Revert "do not ignore MSR=0 even if ignore_bad_msrs is set"
MSR=0 is valid MSR (used for Machine Check Architecture)

This reverts commit cf03c00ef0.
2022-07-31 18:47:13 +03:00
Stanislav Shwartsman
4d227d15fb remove instrument.h from bochs.h so it won't be included everywhere
include it only where required
move PHY_ADDRESS reserved bits consts to cpu.h
2022-07-30 22:35:43 +03:00
Stanislav Shwartsman
cf03c00ef0 do not ignore MSR=0 even if ignore_bad_msrs is set 2022-07-30 19:53:10 +03:00
Stanislav Shwartsman
d576eaa7c1 list in debug CR4 more already published bits (UINTR)
fix debug print of XCR0
2022-07-30 19:15:32 +03:00
Stanislav Shwartsman
3f65841714
use boolean constants true/false instead of 0/1 (#26)
* use boolean constants true/false instead of 0/1

* fix code comment

Co-authored-by: Stanislav Shwartsman <sshwarts@users.sourceforge.net>
2022-07-30 18:38:22 +03:00
Stanislav Shwartsman
0f9aec0e1a Merge branch 'master' of https://github.com/stlintel/Bochs 2022-07-30 15:43:25 +03:00
Stanislav Shwartsman
2093c2b1a3 allow 'Save guest MSR_PERF_GLOBAL_CTRL on VMEXIT' VMX control
at least fake it
2022-07-30 15:43:09 +03:00
Stanislav Shwartsman
f44f4ae753
MBE (Mode Based Execution Control) emulation (#22)
* MBE (Mode Based Execution Control) emulation
2022-07-30 15:26:47 +03:00
Stanislav Shwartsman
fb09790846 dos2unix to all files 2022-07-30 14:31:16 +03:00
Stanislav Shwartsman
8afd14972e
convert many consts from #define to enum or const variables (#23) 2022-07-27 23:20:47 +03:00
Stanislav Shwartsman
94503e7a0b
cpu/vmx definitions (#20)
* update vmx.h with recently published definition
* update actions after conflicts
2022-07-27 20:51:25 +03:00