DisasmTest.cpp revision 878e217bf452f6c70ef9800daa219f2656a71051
77b1a2d8b5dbe2c0b5200794914239fee3c8ee5dvboxsync/* $Id$ */
a0240ff4f7663045c848fdbc192ea3d4d9f70a11vboxsync/** @file
77b1a2d8b5dbe2c0b5200794914239fee3c8ee5dvboxsync * VBox disassembler - Test application
a0240ff4f7663045c848fdbc192ea3d4d9f70a11vboxsync */
a0240ff4f7663045c848fdbc192ea3d4d9f70a11vboxsync
a0240ff4f7663045c848fdbc192ea3d4d9f70a11vboxsync/*
be41e59f051a3abb5cd05e7fe270ab2fea791f5avboxsync * Copyright (C) 2006-2012 Oracle Corporation
a0240ff4f7663045c848fdbc192ea3d4d9f70a11vboxsync *
a0240ff4f7663045c848fdbc192ea3d4d9f70a11vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
a0240ff4f7663045c848fdbc192ea3d4d9f70a11vboxsync * available from http://www.virtualbox.org. This file is free software;
a0240ff4f7663045c848fdbc192ea3d4d9f70a11vboxsync * you can redistribute it and/or modify it under the terms of the GNU
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * General Public License (GPL) as published by the Free Software
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
a0240ff4f7663045c848fdbc192ea3d4d9f70a11vboxsync */
a0240ff4f7663045c848fdbc192ea3d4d9f70a11vboxsync
a0240ff4f7663045c848fdbc192ea3d4d9f70a11vboxsync/*******************************************************************************
a0240ff4f7663045c848fdbc192ea3d4d9f70a11vboxsync* Header Files *
a0240ff4f7663045c848fdbc192ea3d4d9f70a11vboxsync*******************************************************************************/
a0240ff4f7663045c848fdbc192ea3d4d9f70a11vboxsync#include <VBox/dis.h>
a0240ff4f7663045c848fdbc192ea3d4d9f70a11vboxsync#include <VBox/err.h>
cd6f71bc352f550074f1ba2c830a2cf2f0b3dd46vboxsync#include <stdio.h>
43747b1f0bc8302a238fb35e55857a5e9aa1933dvboxsync#include <iprt/string.h>
43747b1f0bc8302a238fb35e55857a5e9aa1933dvboxsync#include <iprt/asm.h>
43747b1f0bc8302a238fb35e55857a5e9aa1933dvboxsync
16a9adc14900ca18e6909679a579f6833425e030vboxsyncDECLASM(int) TestProc();
a0240ff4f7663045c848fdbc192ea3d4d9f70a11vboxsync#ifndef RT_OS_OS2
a0240ff4f7663045c848fdbc192ea3d4d9f70a11vboxsyncDECLASM(int) TestProc64();
a0240ff4f7663045c848fdbc192ea3d4d9f70a11vboxsync#endif
a0240ff4f7663045c848fdbc192ea3d4d9f70a11vboxsync//uint8_t aCode16[] = { 0x66, 0x67, 0x89, 0x07 };
a0240ff4f7663045c848fdbc192ea3d4d9f70a11vboxsync
51fe8789a74f6c118894aaa12eb69ec155386dbdvboxsyncint main(int argc, char **argv)
5341459ca931b65de60b5af2a4cba6836b6b45cavboxsync{
a9f41cb889f53e8407561a6155052c441eb0fc5fvboxsync printf("VBox Disassembler Test\n");
cc15c3fa4bb2d3fb91e4d0cd15a73133963f86b0vboxsync if (argc != 1)
cc15c3fa4bb2d3fb91e4d0cd15a73133963f86b0vboxsync {
b0b15690f00527424b2d5fb88456d747252322f7vboxsync //printf("DisasmBlock on printf:\n");
47579c4cc64e7dff9b4de48841a2c4df3b96ab38vboxsync //DisasmBlock((uint8_t *)printf, 256);
51fe8789a74f6c118894aaa12eb69ec155386dbdvboxsync }
efff36b306e370346025647a158689021df2e1d1vboxsync else
51fe8789a74f6c118894aaa12eb69ec155386dbdvboxsync {
590bfe12ce22cd3716448fbb9f4dc51664bfe5e2vboxsync uint8_t const *pbInstr = (uint8_t const *)(uintptr_t)TestProc;
30c39307775310ba50de9d9b74f1ea9e12524102vboxsync
51fe8789a74f6c118894aaa12eb69ec155386dbdvboxsync for (int i=0;i<50;i++)
51fe8789a74f6c118894aaa12eb69ec155386dbdvboxsync {
51fe8789a74f6c118894aaa12eb69ec155386dbdvboxsync unsigned cb;
30c39307775310ba50de9d9b74f1ea9e12524102vboxsync DISCPUSTATE cpu;
30c39307775310ba50de9d9b74f1ea9e12524102vboxsync char szOutput[256];
30c39307775310ba50de9d9b74f1ea9e12524102vboxsync
590bfe12ce22cd3716448fbb9f4dc51664bfe5e2vboxsync if (RT_SUCCESS(DISInstrToStr(pbInstr, DISCPUMODE_32BIT, &cpu, &cb, szOutput, sizeof(szOutput))))
efff36b306e370346025647a158689021df2e1d1vboxsync {
a0240ff4f7663045c848fdbc192ea3d4d9f70a11vboxsync printf("%s", szOutput);
f5e53763b0a581b0299e98028c6c52192eb06785vboxsync }
a0240ff4f7663045c848fdbc192ea3d4d9f70a11vboxsync else
efff36b306e370346025647a158689021df2e1d1vboxsync {
51fe8789a74f6c118894aaa12eb69ec155386dbdvboxsync printf("DISOne failed!\n");
51fe8789a74f6c118894aaa12eb69ec155386dbdvboxsync return 1;
efff36b306e370346025647a158689021df2e1d1vboxsync }
51fe8789a74f6c118894aaa12eb69ec155386dbdvboxsync pbInstr += cb;
a0240ff4f7663045c848fdbc192ea3d4d9f70a11vboxsync }
a0240ff4f7663045c848fdbc192ea3d4d9f70a11vboxsync
a0240ff4f7663045c848fdbc192ea3d4d9f70a11vboxsync#ifndef RT_OS_OS2
a0240ff4f7663045c848fdbc192ea3d4d9f70a11vboxsync printf("\n64 bits disassembly\n");
a0240ff4f7663045c848fdbc192ea3d4d9f70a11vboxsync pbInstr = (uint8_t const *)(uintptr_t)TestProc64;
1bf495e3eec00dd79cecb6b36ef2a97f422c3737vboxsync
a0240ff4f7663045c848fdbc192ea3d4d9f70a11vboxsync////__debugbreak();
a0240ff4f7663045c848fdbc192ea3d4d9f70a11vboxsync for (int i=0;i<50;i++)
a0240ff4f7663045c848fdbc192ea3d4d9f70a11vboxsync {
9496f2d398b49813176939d7a339ae513d5175efvboxsync unsigned cb;
9496f2d398b49813176939d7a339ae513d5175efvboxsync DISCPUSTATE cpu;
9496f2d398b49813176939d7a339ae513d5175efvboxsync char szOutput[256];
9496f2d398b49813176939d7a339ae513d5175efvboxsync
d80c85a1bc7317da7d0cd1254fae6a20db039c8cvboxsync if (RT_SUCCESS(DISInstrToStr(pbInstr, DISCPUMODE_64BIT, &cpu, &cb, szOutput, sizeof(szOutput))))
d80c85a1bc7317da7d0cd1254fae6a20db039c8cvboxsync printf("%s", szOutput);
d80c85a1bc7317da7d0cd1254fae6a20db039c8cvboxsync else
d80c85a1bc7317da7d0cd1254fae6a20db039c8cvboxsync {
d80c85a1bc7317da7d0cd1254fae6a20db039c8cvboxsync printf("DISOne failed!\n");
d80c85a1bc7317da7d0cd1254fae6a20db039c8cvboxsync return 1;
d80c85a1bc7317da7d0cd1254fae6a20db039c8cvboxsync }
d80c85a1bc7317da7d0cd1254fae6a20db039c8cvboxsync pbInstr += cb;
d80c85a1bc7317da7d0cd1254fae6a20db039c8cvboxsync }
d80c85a1bc7317da7d0cd1254fae6a20db039c8cvboxsync#endif
e4f367251aede667a6de69baa54ef9eb5f150871vboxsync }
e4f367251aede667a6de69baa54ef9eb5f150871vboxsync return 0;
e4f367251aede667a6de69baa54ef9eb5f150871vboxsync}
e4f367251aede667a6de69baa54ef9eb5f150871vboxsync
e4f367251aede667a6de69baa54ef9eb5f150871vboxsync