DBGPlugInLinux.cpp revision 98427c0ab08697e468c26dc33ee9571308577867
0569fe99ac6ea5da1bf4775fe3523165ac39c030vboxsync * DBGPlugInLinux - Debugger and Guest OS Digger Plugin For Linux.
9496b6f77d66eb89f088668752b8838d578d6e10vboxsync * Copyright (C) 2008-2010 Oracle Corporation
9496b6f77d66eb89f088668752b8838d578d6e10vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
9496b6f77d66eb89f088668752b8838d578d6e10vboxsync * available from http://www.virtualbox.org. This file is free software;
9496b6f77d66eb89f088668752b8838d578d6e10vboxsync * you can redistribute it and/or modify it under the terms of the GNU
9496b6f77d66eb89f088668752b8838d578d6e10vboxsync * General Public License (GPL) as published by the Free Software
9496b6f77d66eb89f088668752b8838d578d6e10vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
9496b6f77d66eb89f088668752b8838d578d6e10vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
7bff28e0cedd8656acd24b420759649184d8cf00vboxsync/*******************************************************************************
0569fe99ac6ea5da1bf4775fe3523165ac39c030vboxsync* Header Files *
0569fe99ac6ea5da1bf4775fe3523165ac39c030vboxsync*******************************************************************************/
3b58b08293698f7f081b5558c52e80741a4a6763vboxsync#define LOG_GROUP LOG_GROUP_DBGF ///@todo add new log group.
3b58b08293698f7f081b5558c52e80741a4a6763vboxsync/*******************************************************************************
907ba2c9b3d1821f95be17115ecad9fe8a2cae02vboxsync* Structures and Typedefs *
907ba2c9b3d1821f95be17115ecad9fe8a2cae02vboxsync*******************************************************************************/
907ba2c9b3d1821f95be17115ecad9fe8a2cae02vboxsync/** @name InternalLinux structures
6e793fadebda53870ee54ac9dcdbe30d612f22b5vboxsync * Linux guest OS digger instance data.
907ba2c9b3d1821f95be17115ecad9fe8a2cae02vboxsync /** Whether the information is valid or not.
907ba2c9b3d1821f95be17115ecad9fe8a2cae02vboxsync * (For fending off illegal interface method calls.) */
907ba2c9b3d1821f95be17115ecad9fe8a2cae02vboxsync /** The address of the linux banner.
907ba2c9b3d1821f95be17115ecad9fe8a2cae02vboxsync * This is set during probing. */
1bfc7215a51c113dafd83953d96ab4897d2d3690vboxsync /** Kernel base address.
3b58b08293698f7f081b5558c52e80741a4a6763vboxsync * This is set during probing. */
7bff28e0cedd8656acd24b420759649184d8cf00vboxsync/** Pointer to the linux guest OS digger instance data. */
f09a9ba0e70c09ac2c9728909fbf45cb7f81195dvboxsync/*******************************************************************************
907ba2c9b3d1821f95be17115ecad9fe8a2cae02vboxsync* Defined Constants And Macros *
7bff28e0cedd8656acd24b420759649184d8cf00vboxsync*******************************************************************************/
cfd41a3683178a30bac4417128b4673806653797vboxsync/** Validates a 32-bit linux kernel address */
907ba2c9b3d1821f95be17115ecad9fe8a2cae02vboxsync#define LNX32_VALID_ADDRESS(Addr) ((Addr) > UINT32_C(0x80000000) && (Addr) < UINT32_C(0xfffff000))
907ba2c9b3d1821f95be17115ecad9fe8a2cae02vboxsync/** The max kernel size. */
771761cda2c81e899526a0dce22c8cd2510fff82vboxsync/*******************************************************************************
f4ccb18a71e0e531719734918583f84fbc72ebfevboxsync* Internal Functions *
da6bcae46a663366ea0e6dc42ac221f327efd01fvboxsync*******************************************************************************/
771761cda2c81e899526a0dce22c8cd2510fff82vboxsyncstatic DECLCALLBACK(int) dbgDiggerLinuxInit(PUVM pUVM, void *pvData);
7bff28e0cedd8656acd24b420759649184d8cf00vboxsync/*******************************************************************************
f4ccb18a71e0e531719734918583f84fbc72ebfevboxsync* Global Variables *
da6bcae46a663366ea0e6dc42ac221f327efd01fvboxsync*******************************************************************************/
7bff28e0cedd8656acd24b420759649184d8cf00vboxsync/** Table of common linux kernel addresses. */
f4ccb18a71e0e531719734918583f84fbc72ebfevboxsync * @copydoc DBGFOSREG::pfnQueryInterface
f4ccb18a71e0e531719734918583f84fbc72ebfevboxsyncstatic DECLCALLBACK(void *) dbgDiggerLinuxQueryInterface(PUVM pUVM, void *pvData, DBGFOSINTERFACE enmIf)
c4c106ad74e0ad745ac49a2c4182c4f42ced7248vboxsync * @copydoc DBGFOSREG::pfnQueryVersion
c4c106ad74e0ad745ac49a2c4182c4f42ced7248vboxsyncstatic DECLCALLBACK(int) dbgDiggerLinuxQueryVersion(PUVM pUVM, void *pvData, char *pszVersion, size_t cchVersion)
c4c106ad74e0ad745ac49a2c4182c4f42ced7248vboxsync * It's all in the linux banner.
c4c106ad74e0ad745ac49a2c4182c4f42ced7248vboxsync int rc = DBGFR3MemReadString(pUVM, 0, &pThis->AddrLinuxBanner, pszVersion, cchVersion);
pszEnd--;
return rc;
int rc;
return VINF_SUCCESS;
return VINF_SUCCESS;