__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
# Copyright 2024 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import gdb
from .sources import make_source
from .startup import in_gdb_thread
from .varref import BaseReference
# Map a block identifier to a scope object.
_id_to_scope = {}
# Arrange to clear the scope references when the inferior runs.
@in_gdb_thread
def clear(event):
global _id_to_scope
_id_to_scope = {}
gdb.events.cont.connect(clear)
# A scope that holds static and/or global variables.
class _Globals(BaseReference):
def __init__(self, filename, var_list):
super().__init__("Globals")
self.filename = filename
self.var_list = var_list
def to_object(self):
result = super().to_object()
result["presentationHint"] = "globals"
# How would we know?
result["expensive"] = False
result["namedVariables"] = self.child_count()
if self.filename is not None:
result["source"] = make_source(self.filename)
return result
def has_children(self):
# This object won't even be created if there are no variables
# to return.
return True
def child_count(self):
return len(self.var_list)
@in_gdb_thread
def fetch_one_child(self, idx):
sym = self.var_list[idx]
return (sym.name, sym.value())
@in_gdb_thread
def get_global_scope(frame):
"""Given a frame decorator, return the corresponding global scope
object.
If the frame does not have a block, or if the CU does not have
globals (that is, empty static and global blocks), return None."""
inf_frame = frame.inferior_frame()
# It's unfortunate that this API throws instead of returning None.
try:
block = inf_frame.block()
except RuntimeError:
return None
global _id_to_scope
block = block.static_block
if block in _id_to_scope:
return _id_to_scope[block]
syms = []
block_iter = block
while block_iter is not None:
syms += [sym for sym in block_iter if sym.is_variable and not sym.is_artificial]
block_iter = block_iter.superblock
if len(syms) == 0:
return None
result = _Globals(frame.filename(), syms)
_id_to_scope[block] = result
return result
| Name | Type | Size | Permission | Actions |
|---|---|---|---|---|
| __init__.py | File | 3.49 KB | 0644 |
|
| breakpoint.py | File | 14.08 KB | 0644 |
|
| bt.py | File | 5.7 KB | 0644 |
|
| disassemble.py | File | 3.4 KB | 0644 |
|
| evaluate.py | File | 4.49 KB | 0644 |
|
| events.py | File | 8.38 KB | 0644 |
|
| frames.py | File | 5.03 KB | 0644 |
|
| globalvars.py | File | 2.81 KB | 0644 |
|
| io.py | File | 2.79 KB | 0644 |
|
| launch.py | File | 5.57 KB | 0644 |
|
| locations.py | File | 1.9 KB | 0644 |
|
| memory.py | File | 1.48 KB | 0644 |
|
| modules.py | File | 1.82 KB | 0644 |
|
| next.py | File | 3.32 KB | 0644 |
|
| pause.py | File | 882 B | 0644 |
|
| scopes.py | File | 5.64 KB | 0644 |
|
| server.py | File | 24.65 KB | 0644 |
|
| sources.py | File | 3.07 KB | 0644 |
|
| startup.py | File | 6.55 KB | 0644 |
|
| state.py | File | 951 B | 0644 |
|
| threads.py | File | 1.21 KB | 0644 |
|
| typecheck.py | File | 3.35 KB | 0644 |
|
| varref.py | File | 9.85 KB | 0644 |
|