VirtualBox

Changeset 8934 in vbox for trunk


Ignore:
Timestamp:
May 19, 2008 8:28:08 PM (17 years ago)
Author:
vboxsync
Message:

Hacking in progress.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Disassembler/testcase/tstDisasm-2.cpp

    r8932 r8934  
    4343    uint8_t        *pbInstr;            /**< The current instruction (pointer). */
    4444    uint32_t        cbInstr;            /**< The size of the current instruction. */
     45    bool            fInvalid;           /**< Whether the instruction is invalid/illegal or not. */
     46    bool            fRaw;               /**< Whether invalid instructions are printed as byte defintions or not. */
    4547    int             rc;                 /**< Set if we hit EOF. */
    4648    size_t          cbLeft;             /**< The number of bytes left. (read) */
     
    191193 * @param   enmStyle    The assembly output style.
    192194 * @param   fListing    Whether to print in a listing like mode.
     195 * @param   fRaw        Whether to output byte definitions for invalid sequences.
     196 * @param   fAllInvalid Whether all instructions are expected to be invalid.
    193197 */
    194198static int MyDisasmBlock(const char *argv0, DISCPUMODE enmCpuMode, uint64_t uAddress, uint8_t *pbFile, size_t cbFile,
    195                          ASMSTYLE enmStyle, bool fListing)
     199                         ASMSTYLE enmStyle, bool fListing, bool fRaw, bool fAllInvalid)
    196200{
    197201    /*
     
    204208    State.pbInstr = pbFile;
    205209    State.cbInstr = 0;
     210    State.fInvalid = false;
     211    State.fRaw = fRaw;
    206212    State.rc = VINF_SUCCESS;
    207213    State.cbLeft = cbFile;
     
    245251        if (RT_SUCCESS(rc))
    246252        {
    247             pfnFormatter(&State);
     253            State.fInvalid = State.Cpu.pCurInstr->opcode == OP_INVALID
     254                          || State.Cpu.pCurInstr->opcode == OP_ILLUD2;
     255            if (!State.fInvalid || !fAllInvalid)
     256                pfnFormatter(&State);
     257            else
     258            {
     259                RTPrintf("%s: error at %#RX64: unexpected valid instruction\n", argv0, State.uAddress);
     260                pfnFormatter(&State);
     261                rcRet = VERR_GENERAL_FAILURE;
     262            }
    248263        }
    249264        else
     
    257272            {
    258273                RTPrintf("%s: error at %#RX64: %Rrc cbInstr=%d!\n", argv0, State.uAddress, rc, State.cbInstr);
    259                 rcRet = rc;
     274                if (rcRet == VINF_SUCCESS)
     275                    rcRet = rc;
    260276                break;
    261277            }
     
    291307"  --cpumode|-c <16|32|64>\n"
    292308"    The cpu mode. Default: 32\n"
     309"  --all-invalid|-i\n"
     310"    When specified all instructions are expected to be invalid.\n"
    293311"  --listing|-l, --no-listing|-L\n"
    294312"    Enables or disables listing mode. Default: --no-listing\n"
    295313"  --offset|-o <offset>\n"
    296314"    The file offset at which to start disassembling. Default: 0\n"
     315"  --raw|-r, --no-raw|-R\n"
     316"    Whether to employ byte defines for unknown bits. Default: --no-raw\n"
    297317"  --style|-s <default|yasm|masm>\n"
    298318"    The assembly output style. Default: default\n"
     
    310330    ASMSTYLE enmStyle = kAsmStyle_Default;
    311331    bool fListing = true;
     332    bool fRaw = false;
     333    bool fAllInvalid = false;
    312334    DISCPUMODE enmCpuMode = CPUMODE_32BIT;
    313335    RTFOFF off = 0;
     
    323345        { "--help",         'h', 0 },
    324346        { "--bytes",        'b', RTGETOPT_REQ_INT64 },
     347        { "--all-invalid",  'i', 0, },
    325348        { "--listing",      'l', 0 },
    326349        { "--no-listing",   'L', 0 },
    327350        { "--offset",       'o', RTGETOPT_REQ_INT64 },
     351        { "--raw",          'r', 0 },
     352        { "--no-raw",       'R', 0 },
    328353        { "--style",        's', RTGETOPT_REQ_STRING },
    329354    };
     
    361386                return Usage(argv[0]);
    362387
     388            case 'i':
     389                fAllInvalid = true;
     390                break;
     391
    363392            case 'l':
    364393                fListing = true;
     
    371400            case 'o':
    372401                off = ValueUnion.i;
     402                break;
     403
     404            case 'r':
     405                fRaw = true;
     406                break;
     407
     408            case 'R':
     409                fRaw = false;
    373410                break;
    374411
     
    420457         * Disassemble it.
    421458         */
    422         rc = MyDisasmBlock(argv[0], enmCpuMode, uAddress, (uint8_t *)pvFile, cbFile, enmStyle, fListing);
     459        rc = MyDisasmBlock(argv[0], enmCpuMode, uAddress, (uint8_t *)pvFile, cbFile, enmStyle, fListing, fRaw, fAllInvalid);
    423460        if (RT_FAILURE(rc))
    424461            break;
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette