From 918da7cf787092d4b2dbac6e090a06a29d968e4b Mon Sep 17 00:00:00 2001 From: varunchennamadhava Date: Tue, 27 Jan 2026 14:02:34 -0500 Subject: [PATCH 1/8] initial commit asxb --- cbxp/control_block_explorer.cpp | 6 ++- cbxp/control_blocks/asxb.cpp | 68 +++++++++++++++++++++++++++++++++ cbxp/control_blocks/asxb.hpp | 17 +++++++++ 3 files changed, 90 insertions(+), 1 deletion(-) create mode 100644 cbxp/control_blocks/asxb.cpp create mode 100644 cbxp/control_blocks/asxb.hpp diff --git a/cbxp/control_block_explorer.cpp b/cbxp/control_block_explorer.cpp index f1cfd65..4a41d1c 100644 --- a/cbxp/control_block_explorer.cpp +++ b/cbxp/control_block_explorer.cpp @@ -13,6 +13,7 @@ #include "control_blocks/cvt.hpp" #include "control_blocks/ecvt.hpp" #include "control_blocks/psa.hpp" +#include "control_blocks/asxb.hpp" #include "logger.hpp" namespace CBXP { @@ -86,7 +87,10 @@ void ControlBlockExplorer::exploreControlBlock( control_block_json = ASVT(includes).get(); } else if (control_block_name == "assb") { control_block_json = ASSB(includes).get(); - } else { + } else if (control_block_name == "asxb") { + control_block_json = ASXB(includes).get(); + } + else { throw ControlBlockError(); } } catch (const CBXPError& e) { diff --git a/cbxp/control_blocks/asxb.cpp b/cbxp/control_blocks/asxb.cpp new file mode 100644 index 0000000..c15e018 --- /dev/null +++ b/cbxp/control_blocks/asxb.cpp @@ -0,0 +1,68 @@ +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include "ascb.hpp" +#include "asvt.hpp" +#include "logger.hpp" + +namespace CBXP { +nlohmann::json ASXB::get(void* __ptr32 p_control_block) { + const asxb* __ptr32 p_asxb; + nlohmann::json asxb_json = {}; + if (p_control_block == nullptr) { + // PSA starts at address 0 + const struct psa* __ptr32 p_psa = 0; + + const struct cvtmap* __ptr32 p_cvtmap = + // 'nullPointer' is a false positive because the PSA starts at address 0 + // cppcheck-suppress nullPointer + static_cast(p_psa->flccvt); + const asvt_t* __ptr32 p_asvt = + static_cast(p_cvtmap->cvtasvt); + + asxb_json["asxbs"] = std::vector(); + std::vector& asxbs = + asxb_json["asxbs"].get_ref&>(); + asxbs.reserve(p_asvt->asvtmaxu); + + const uint32_t* __ptr32 p_ascb_addr = + reinterpret_cast(&p_asvt->asvtenty); + for (int i = 0; i < p_asvt->asvtmaxu; i++) { + if (0x80000000 & *p_ascb_addr) { + Logger::getInstance().debug(formatter_.getHex(p_ascb_addr) + + " is not a valid ASCB address"); + p_ascb_addr++; + continue; + } + // cast ascb addr into ascb pointer a + // + const struct ascb* __ptr32 p_ascb = + reinterpret_cast(*p_ascb_addr); + asxbs.push_back( + ASXB::get(reinterpret_cast(p_ascb->ascbasxb))); + p_ascb_addr++; // This SHOULD increment the pointer by 4 bytes. + } + return asxbs; + } else { + p_asxb = static_cast(p_control_block); + } + + Logger::getInstance().debug("asxb hex dump:"); + Logger::getInstance().hexDump(reinterpret_cast(p_asxb), + sizeof(struct asxb)); + + asxb_json["assb_cms_lockinst_addr"] = + formatter_.getHex(&(p_asxb->ASXBFTCB)); + + + return asxb_json; +} +} // namespace CBXP diff --git a/cbxp/control_blocks/asxb.hpp b/cbxp/control_blocks/asxb.hpp new file mode 100644 index 0000000..a0d9737 --- /dev/null +++ b/cbxp/control_blocks/asxb.hpp @@ -0,0 +1,17 @@ +#ifndef __ASXB_H_ +#define __ASXB_H_ + +#include "control_block.hpp" + +namespace CBXP { + +class ASXB : public ControlBlock { + public: + nlohmann::json get(void* __ptr32 p_control_block = nullptr) override; + explicit ASSB(const std::vector& includes) + : ControlBlock("asxb", {}, includes) {} +}; + +} // namespace CBXP + +#endif From 2e7168bb58c2a660abad82f1e74f3092bc962736 Mon Sep 17 00:00:00 2001 From: varunchennamadhava Date: Tue, 27 Jan 2026 14:11:57 -0500 Subject: [PATCH 2/8] fixing issue Signed-off-by: varunchennamadhava --- cbxp/control_blocks/asxb.cpp | 4 ++-- cbxp/control_blocks/asxb.hpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cbxp/control_blocks/asxb.cpp b/cbxp/control_blocks/asxb.cpp index c15e018..479b1f7 100644 --- a/cbxp/control_blocks/asxb.cpp +++ b/cbxp/control_blocks/asxb.cpp @@ -59,8 +59,8 @@ nlohmann::json ASXB::get(void* __ptr32 p_control_block) { Logger::getInstance().hexDump(reinterpret_cast(p_asxb), sizeof(struct asxb)); - asxb_json["assb_cms_lockinst_addr"] = - formatter_.getHex(&(p_asxb->ASXBFTCB)); + asxb_json["asxbftcb"] = + formatter_.getHex(&(p_asxb->asxbftcb)); return asxb_json; diff --git a/cbxp/control_blocks/asxb.hpp b/cbxp/control_blocks/asxb.hpp index a0d9737..4efb6d5 100644 --- a/cbxp/control_blocks/asxb.hpp +++ b/cbxp/control_blocks/asxb.hpp @@ -9,7 +9,7 @@ class ASXB : public ControlBlock { public: nlohmann::json get(void* __ptr32 p_control_block = nullptr) override; explicit ASSB(const std::vector& includes) - : ControlBlock("asxb", {}, includes) {} + : ControlBlock("asxb", {"assb"}, includes) {} }; } // namespace CBXP From 039bbe719e9bff3aff338c79a6ef151880cec324 Mon Sep 17 00:00:00 2001 From: varunchennamadhava Date: Tue, 27 Jan 2026 14:14:05 -0500 Subject: [PATCH 3/8] fixing issue 1 Signed-off-by: varunchennamadhava --- cbxp/control_blocks/asxb.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cbxp/control_blocks/asxb.hpp b/cbxp/control_blocks/asxb.hpp index 4efb6d5..a386423 100644 --- a/cbxp/control_blocks/asxb.hpp +++ b/cbxp/control_blocks/asxb.hpp @@ -8,8 +8,8 @@ namespace CBXP { class ASXB : public ControlBlock { public: nlohmann::json get(void* __ptr32 p_control_block = nullptr) override; - explicit ASSB(const std::vector& includes) - : ControlBlock("asxb", {"assb"}, includes) {} + explicit ASXB(const std::vector& includes) + : ControlBlock("assb", {}, includes) {} }; } // namespace CBXP From 8d063a29ad7bfef2377d82074d97d28a297ad1ba Mon Sep 17 00:00:00 2001 From: varunchennamadhava Date: Tue, 27 Jan 2026 14:26:38 -0500 Subject: [PATCH 4/8] fixing issue 2 Signed-off-by: varunchennamadhava --- cbxp/control_blocks/asxb.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cbxp/control_blocks/asxb.hpp b/cbxp/control_blocks/asxb.hpp index a386423..720d524 100644 --- a/cbxp/control_blocks/asxb.hpp +++ b/cbxp/control_blocks/asxb.hpp @@ -9,7 +9,7 @@ class ASXB : public ControlBlock { public: nlohmann::json get(void* __ptr32 p_control_block = nullptr) override; explicit ASXB(const std::vector& includes) - : ControlBlock("assb", {}, includes) {} + : ControlBlock("asxb", {}, includes) {} }; } // namespace CBXP From de222fe7250f3bd2fa868535f505e81adef95230 Mon Sep 17 00:00:00 2001 From: varunchennamadhava Date: Tue, 27 Jan 2026 16:12:42 -0500 Subject: [PATCH 5/8] fixing issue 3 Signed-off-by: varunchennamadhava --- cbxp/control_blocks/asxb.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/cbxp/control_blocks/asxb.cpp b/cbxp/control_blocks/asxb.cpp index 479b1f7..e4507e1 100644 --- a/cbxp/control_blocks/asxb.cpp +++ b/cbxp/control_blocks/asxb.cpp @@ -59,8 +59,11 @@ nlohmann::json ASXB::get(void* __ptr32 p_control_block) { Logger::getInstance().hexDump(reinterpret_cast(p_asxb), sizeof(struct asxb)); - asxb_json["asxbftcb"] = - formatter_.getHex(&(p_asxb->asxbftcb)); + asxb_json["asxbftcb"] = formatter_.getHex(&(p_asxb->asxbftcb)); + + asxb_json["asxbitcb"] = formatter_.getHex(&(p_asxb->asxbitcb)); + + asxb_json["asxbitcb"] = p_asxb->asxb_noabdump return asxb_json; From 88c603a4dd5681328fa3518358e4668617d63fb6 Mon Sep 17 00:00:00 2001 From: varunchennamadhava Date: Wed, 28 Jan 2026 10:28:27 -0500 Subject: [PATCH 6/8] added most of control blocks Signed-off-by: varunchennamadhava --- cbxp/control_blocks/asxb.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/cbxp/control_blocks/asxb.cpp b/cbxp/control_blocks/asxb.cpp index e4507e1..07d824c 100644 --- a/cbxp/control_blocks/asxb.cpp +++ b/cbxp/control_blocks/asxb.cpp @@ -59,11 +59,10 @@ nlohmann::json ASXB::get(void* __ptr32 p_control_block) { Logger::getInstance().hexDump(reinterpret_cast(p_asxb), sizeof(struct asxb)); + asxb_json["asxb_noabdump"] = p_asxb->asxb_noabdump; asxb_json["asxbftcb"] = formatter_.getHex(&(p_asxb->asxbftcb)); - asxb_json["asxbitcb"] = formatter_.getHex(&(p_asxb->asxbitcb)); - asxb_json["asxbitcb"] = p_asxb->asxb_noabdump return asxb_json; From 954f55e0a34ffbbfae2b4211d1572738c206ff25 Mon Sep 17 00:00:00 2001 From: varunchennamadhava Date: Wed, 28 Jan 2026 13:02:41 -0500 Subject: [PATCH 7/8] added most of control blocks Signed-off-by: varunchennamadhava --- cbxp/control_blocks/asxb.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/cbxp/control_blocks/asxb.cpp b/cbxp/control_blocks/asxb.cpp index 07d824c..d98fd6f 100644 --- a/cbxp/control_blocks/asxb.cpp +++ b/cbxp/control_blocks/asxb.cpp @@ -59,9 +59,15 @@ nlohmann::json ASXB::get(void* __ptr32 p_control_block) { Logger::getInstance().hexDump(reinterpret_cast(p_asxb), sizeof(struct asxb)); + asxb_json["asxb_noabdump"] = p_asxb->asxb_noabdump; asxb_json["asxbftcb"] = formatter_.getHex(&(p_asxb->asxbftcb)); asxb_json["asxbitcb"] = formatter_.getHex(&(p_asxb->asxbitcb)); + asxb_json["asxbltcb"] = formatter_.getHex(&(p_asxb->asxbltcb)); + asxb_json["asxblwa"] = formatter_.getHex(&(p_asxb->asxblwa)); + asxb_json["asxbsenv"] = formatter_.getHex(&(p_asxb->asxbsenv)); + asxb_json["asxbusr8"] = formatter_.getHex(&(p_asxb->asxbusr8)); + asxb_json["asxbuser"] = formatter_.getString(p_asxb->asxbuser, 7); From 3c840576c6ba05788be58e4a9b18ca0221b85c7e Mon Sep 17 00:00:00 2001 From: varunchennamadhava Date: Wed, 28 Jan 2026 14:40:53 -0500 Subject: [PATCH 8/8] control block includes fixing Signed-off-by: varunchennamadhava --- cbxp/control_blocks/ascb.cpp | 5 +++++ cbxp/control_blocks/ascb.hpp | 2 +- cbxp/control_blocks/asxb.cpp | 1 - 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/cbxp/control_blocks/ascb.cpp b/cbxp/control_blocks/ascb.cpp index d2f5fa9..44b4158 100644 --- a/cbxp/control_blocks/ascb.cpp +++ b/cbxp/control_blocks/ascb.cpp @@ -11,6 +11,7 @@ #include "assb.hpp" #include "asvt.hpp" +#include "asxb.hpp" #include "logger.hpp" namespace CBXP { @@ -58,6 +59,10 @@ nlohmann::json ASCB::get(void* __ptr32 p_control_block) { ascb_json["ascbassb"] = CBXP::ASSB(include_includes).get(p_ascb->ascbassb); } + else if (include == "asxb") { + ascb_json["ascbasxb"] = + CBXP::ASXB(include_includes).get(p_ascb->ascbasxb); + } } Logger::getInstance().debug("ASCB hex dump:"); diff --git a/cbxp/control_blocks/ascb.hpp b/cbxp/control_blocks/ascb.hpp index e811530..778fb37 100644 --- a/cbxp/control_blocks/ascb.hpp +++ b/cbxp/control_blocks/ascb.hpp @@ -9,7 +9,7 @@ class ASCB : public ControlBlock { public: nlohmann::json get(void* __ptr32 p_control_block = nullptr) override; explicit ASCB(const std::vector& includes) - : ControlBlock("ascb", {"assb"}, includes) {} + : ControlBlock("ascb", {"assb", "asxb"}, includes) {} }; } // namespace CBXP diff --git a/cbxp/control_blocks/asxb.cpp b/cbxp/control_blocks/asxb.cpp index d98fd6f..8a4ebed 100644 --- a/cbxp/control_blocks/asxb.cpp +++ b/cbxp/control_blocks/asxb.cpp @@ -8,7 +8,6 @@ #include #include #include - #include "ascb.hpp" #include "asvt.hpp" #include "logger.hpp"