Pin
Enumerations | Functions
SEC: Section Object

Enumerations

enum  LEVEL_CORE::SEC_TYPE {
  SEC_TYPE_INVALID,
  SEC_TYPE_UNUSED,
  LEVEL_CORE::SEC_TYPE_REGREL,
  LEVEL_CORE::SEC_TYPE_DYNREL,
  LEVEL_CORE::SEC_TYPE_EXEC,
  LEVEL_CORE::SEC_TYPE_DATA,
  LEVEL_CORE::SEC_TYPE_DYNAMIC,
  SEC_TYPE_OPD,
  SEC_TYPE_GOT,
  SEC_TYPE_STACK,
  SEC_TYPE_PLTOFF,
  SEC_TYPE_HASH,
  LEVEL_CORE::SEC_TYPE_LSDA,
  SEC_TYPE_UNWIND,
  SEC_TYPE_UNWINDINFO,
  SEC_TYPE_REGSYM,
  SEC_TYPE_DYNSYM,
  SEC_TYPE_DEBUG,
  LEVEL_CORE::SEC_TYPE_BSS,
  SEC_TYPE_SYMSTR,
  SEC_TYPE_DYNSTR,
  SEC_TYPE_SECSTR,
  SEC_TYPE_COMMENT,
  LEVEL_CORE::SEC_TYPE_LOOS,
  LEVEL_CORE::SEC_TYPE_USER,
  LEVEL_CORE::SEC_TYPE_PROC,
  SEC_TYPE_LAST
}
 

Functions

IMG LEVEL_PINCLIENT::SEC_Img (SEC sec)
 
SEC LEVEL_PINCLIENT::SEC_Next (SEC sec)
 
SEC LEVEL_PINCLIENT::SEC_Prev (SEC sec)
 
SEC LEVEL_PINCLIENT::SEC_Invalid ()
 
BOOL LEVEL_PINCLIENT::SEC_Valid (SEC x)
 
RTN LEVEL_PINCLIENT::SEC_RtnHead (SEC sec)
 
RTN LEVEL_PINCLIENT::SEC_RtnTail (SEC sec)
 
const std::string & LEVEL_PINCLIENT::SEC_Name (SEC sec)
 
SEC_TYPE LEVEL_PINCLIENT::SEC_Type (SEC sec)
 
BOOL LEVEL_PINCLIENT::SEC_Mapped (SEC sec)
 
const VOID * LEVEL_PINCLIENT::SEC_Data (SEC sec)
 
ADDRINT LEVEL_PINCLIENT::SEC_Address (SEC sec)
 
BOOL LEVEL_PINCLIENT::SEC_IsReadable (SEC sec)
 
BOOL LEVEL_PINCLIENT::SEC_IsWriteable (SEC sec)
 
BOOL LEVEL_PINCLIENT::SEC_IsExecutable (SEC sec)
 
USIZE LEVEL_PINCLIENT::SEC_Size (SEC sec)
 

Detailed Description

A SEC is modeled after the sections found inside elf images. Can be accessed at instrumentation time and analysis time.

SECs can be mapped or unmapped, a mapped SEC occupies address space inside the IMG. Unmapped SECs often contain debug and relocation information.
APIs from this group are available in any thread, including any internal thread spawned by the tool.

Iteration idioms:

// Forward pass over all sections in an image
for( SEC sec= IMG_SecHead(img); SEC_Valid(sec); sec = SEC_Next(sec) )
// Reverse pass over all sections in animage
for( SEC sec= IMG_SecTail(img); SEC_Valid(sec); sec = SEC_Prev(sec) )
Availability:
Mode: JIT & Probe
O/S: Linux & Windows
CPU: All

Enumeration Type Documentation

◆ SEC_TYPE

SEC types

Enumerator
SEC_TYPE_REGREL 

relocations

SEC_TYPE_DYNREL 

dynamic relocations

SEC_TYPE_EXEC 

contains code

SEC_TYPE_DATA 

contains initialized data

SEC_TYPE_DYNAMIC 

contains dynamic code

SEC_TYPE_LSDA 

old exception_info (obsolete)

SEC_TYPE_BSS 

contains uninitialized data

SEC_TYPE_LOOS 

OS specific.

SEC_TYPE_USER 

Application specific.

SEC_TYPE_PROC 

Processor specific.

Function Documentation

◆ SEC_Address()

ADDRINT LEVEL_PINCLIENT::SEC_Address ( SEC  sec)
Returns
Address in memory of sec

If image is loaded by system loader, the real virtual address of section will be returned. If the image is mapped by IMG_Open() the address will be inside the mapped image. On Unix, if the section is not loadable, 0 will be returned in the both cases.

◆ SEC_Data()

const VOID* LEVEL_PINCLIENT::SEC_Data ( SEC  sec)
Returns
Return a pointer to the raw data for the section

On Linux, Pin maps the whole image file for processing. The pointer returned by SEC_Data() points inside the mapped file. Note, SEC_Data() pointer is always between IMG_StartAddress() and IMG_StartAddress() + IMG_SizeMapped(). If you are analyzing image in image-load callback, please remember that the image will be unmapped after the callback returns and the pointer provided by SEC_Data() becomes invalid. If you are working with IMG_Open() the pointer is valid until IMG_Close().

If section does not have raw data the function returns 0.

Availability:
Mode: JIT & Probe
O/S: Linux, Windows & macOS*
CPU: All

◆ SEC_Img()

IMG LEVEL_PINCLIENT::SEC_Img ( SEC  sec)
Returns
Image that contains this section
Availability:
Mode: JIT & Probe
O/S: Linux, Windows & macOS*
CPU: All

◆ SEC_Invalid()

SEC LEVEL_PINCLIENT::SEC_Invalid ( )
Returns
Invalid section value
Availability:
Mode: JIT & Probe
O/S: Linux, Windows & macOS*
CPU: All

◆ SEC_IsExecutable()

BOOL LEVEL_PINCLIENT::SEC_IsExecutable ( SEC  sec)
Returns
TRUE if section is executable

◆ SEC_IsReadable()

BOOL LEVEL_PINCLIENT::SEC_IsReadable ( SEC  sec)
Returns
TRUE if section is readable

◆ SEC_IsWriteable()

BOOL LEVEL_PINCLIENT::SEC_IsWriteable ( SEC  sec)
Returns
TRUE if section is writable

◆ SEC_Mapped()

BOOL LEVEL_PINCLIENT::SEC_Mapped ( SEC  sec)
Returns
True if section is mapped in memory, unmapped section contain data not needed at run time, like debug information
Availability:
Mode: JIT & Probe
O/S: Linux, Windows & macOS*
CPU: All

◆ SEC_Name()

const std::string& LEVEL_PINCLIENT::SEC_Name ( SEC  sec)
Returns
Section name
Availability:
Mode: JIT & Probe
O/S: Linux, Windows & macOS*
CPU: All

◆ SEC_Next()

SEC LEVEL_PINCLIENT::SEC_Next ( SEC  sec)
Returns
Section that follows x, or SEC_Invalid() is x is last section in the image
Availability:
Mode: JIT & Probe
O/S: Linux, Windows & macOS*
CPU: All

◆ SEC_Prev()

SEC LEVEL_PINCLIENT::SEC_Prev ( SEC  sec)
Returns
Previous section of x, or SEC_Invalid() if x is the first in the image
Availability:
Mode: JIT & Probe
O/S: Linux, Windows & macOS*
CPU: All

◆ SEC_RtnHead()

RTN LEVEL_PINCLIENT::SEC_RtnHead ( SEC  sec)
Returns
First RTN of x, or RTN_Invalid() if no RTNs
Availability:
Mode: JIT & Probe
O/S: Linux, Windows & macOS*
CPU: All

◆ SEC_RtnTail()

RTN LEVEL_PINCLIENT::SEC_RtnTail ( SEC  sec)
Returns
Last RTN of x, or RTN_Invalid() if no RTNs
Availability:
Mode: JIT & Probe
O/S: Linux, Windows & macOS*
CPU: All

◆ SEC_Size()

USIZE LEVEL_PINCLIENT::SEC_Size ( SEC  sec)
Returns
Size of section

◆ SEC_Type()

SEC_TYPE LEVEL_PINCLIENT::SEC_Type ( SEC  sec)
Returns
Section type
Availability:
Mode: JIT & Probe
O/S: Linux, Windows & macOS*
CPU: All

◆ SEC_Valid()

BOOL LEVEL_PINCLIENT::SEC_Valid ( SEC  x)
Returns
True if x is not SEC_Invalid()
Availability:
Mode: JIT & Probe
O/S: Linux, Windows & macOS*
CPU: All