├── Client ├── Global.cpp ├── Global.h ├── NetworkDlg.cpp ├── NetworkDlg.h ├── NetworkManager.cpp ├── NetworkManager.h ├── TextViewDlg.cpp ├── TextViewDlg.h ├── framework.h ├── pch.cpp ├── pch.h ├── release │ └── x64 │ │ └── Kernel_hwBp_Client.exe ├── res │ ├── testHwBpClient.ico │ └── testHwBpClient.rc2 ├── resource.h ├── targetver.h ├── testHwBpClient.aps ├── testHwBpClient.cpp ├── testHwBpClient.h ├── testHwBpClient.rc ├── testHwBpClient.vcxproj ├── testHwBpClient.vcxproj.filters ├── testHwBpClient.vcxproj.user ├── testHwBpClientDlg.cpp └── testHwBpClientDlg.h ├── ExecTool ├── Android.mk ├── Application.mk ├── build.sh ├── clean.sh ├── include │ ├── HwBreakpointManager.h │ └── cvector.h ├── outputs │ ├── libs │ │ └── arm64-v8a │ │ │ └── Kernel_hwBP_Exec │ └── obj │ │ └── local │ │ └── arm64-v8a │ │ ├── Kernel_hwBP_Exec │ │ ├── Kernel_hwBP_exec │ │ └── objs │ │ ├── Kernel_hwBP_Exec │ │ └── src │ │ │ ├── cvector.o │ │ │ ├── cvector.o.d │ │ │ ├── main.o │ │ │ └── main.o.d │ │ └── Kernel_hwBP_exec │ │ └── src │ │ ├── cvector.o │ │ ├── cvector.o.d │ │ ├── main.o │ │ └── main.o.d └── src │ ├── cvector.c │ └── main.cpp ├── LICENSE ├── Makefile ├── README.md ├── Server ├── Android.mk ├── Application.mk ├── build.sh ├── clean.sh ├── include │ ├── Global.h │ ├── HwBreakpointManager.h │ ├── api.h │ ├── cvector.h │ ├── hwbpserver.h │ └── porthelp.h ├── outputs │ ├── libs │ │ └── arm64-v8a │ │ │ └── Kernel_hwBP_Server │ └── obj │ │ └── local │ │ └── arm64-v8a │ │ ├── Kernel_hwBP_Server │ │ └── objs │ │ └── Kernel_hwBP_Server │ │ └── src │ │ ├── Global.o │ │ ├── Global.o.d │ │ ├── api.o │ │ ├── api.o.d │ │ ├── cvector.o │ │ ├── cvector.o.d │ │ ├── main.o │ │ ├── main.o.d │ │ ├── porthelp.o │ │ └── porthelp.o.d └── src │ ├── Global.cpp │ ├── api.cpp │ ├── cvector.c │ ├── main.cpp │ └── porthelp.cpp ├── cvector.c ├── cvector.h ├── hwBreakpointProc.ko ├── proc.h ├── res ├── Client.png └── MFC.png ├── sys.c ├── ver_control.h └── vermagic /Client/Global.cpp: -------------------------------------------------------------------------------- 1 | #include "pch.h" 2 | #include "Global.h" 3 | 4 | CNetworkManager g_NetworkManager; -------------------------------------------------------------------------------- /Client/Global.h: -------------------------------------------------------------------------------- 1 | #ifndef GLOBAL_H_ 2 | #define GLOBAL_H_ 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #pragma comment(lib, "comsuppw.lib") 11 | #include "NetworkManager.h" 12 | 13 | extern CNetworkManager g_NetworkManager; 14 | 15 | static std::string ws2s(const std::wstring& ws) { 16 | _bstr_t t = ws.c_str(); 17 | char* pchar = (char*)t; 18 | std::string result = pchar; 19 | return result; 20 | } 21 | 22 | static std::wstring s2ws(const std::string& s) { 23 | _bstr_t t = s.c_str(); 24 | wchar_t* pwchar = (wchar_t*)t; 25 | std::wstring result = pwchar; 26 | return result; 27 | } 28 | #if defined(_MSC_VER) 29 | #include 30 | typedef SSIZE_T ssize_t; 31 | #endif 32 | static ssize_t recvall(SOCKET s, void *buf, size_t size, int flags) { 33 | ssize_t totalreceived = 0; 34 | ssize_t sizeleft = size; 35 | unsigned char *buffer = (unsigned char*)buf; 36 | 37 | // enter recvall 38 | flags = flags | MSG_WAITALL; 39 | 40 | while (sizeleft > 0) { 41 | auto i = recv(s, (char*)&buffer[totalreceived], sizeleft, flags); 42 | if (i == 0) { 43 | printf("recv returned 0\n"); 44 | return i; 45 | } 46 | if (i == -1) { 47 | printf("recv returned -1\n"); 48 | if (errno == EINTR) { 49 | printf("errno = EINTR\n"); 50 | i = 0; 51 | } else { 52 | printf("Error during recvall: %d. errno=%d\n", (int)i, errno); 53 | return i; //read error, or disconnected 54 | } 55 | } 56 | totalreceived += i; 57 | sizeleft -= i; 58 | } 59 | // leave recvall 60 | return totalreceived; 61 | } 62 | 63 | static ssize_t sendall(SOCKET s, void *buf, size_t size, int flags) { 64 | ssize_t totalsent = 0; 65 | ssize_t sizeleft = size; 66 | unsigned char *buffer = (unsigned char*)buf; 67 | 68 | while (sizeleft > 0) { 69 | auto i = send(s, (const char*)&buffer[totalsent], sizeleft, flags); 70 | 71 | if (i == 0) { 72 | return i; 73 | } 74 | 75 | if (i == -1) { 76 | if (errno == EINTR) { 77 | i = 0; 78 | } else { 79 | printf("Error during sendall: %d. errno=%d\n", (int)i, errno); 80 | return i; 81 | } 82 | } 83 | totalsent += i; 84 | sizeleft -= i; 85 | } 86 | 87 | return totalsent; 88 | } 89 | 90 | 91 | #endif /* GLOBAL_H_ */ -------------------------------------------------------------------------------- /Client/NetworkDlg.cpp: -------------------------------------------------------------------------------- 1 | // NetworkDlg.cpp: 实现文件 2 | // 3 | 4 | #include "pch.h" 5 | #include "testHwBpClient.h" 6 | #include "NetworkDlg.h" 7 | #include "afxdialogex.h" 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include 13 | #pragma comment(lib,"IPHlpApi.lib") 14 | #include 15 | #pragma comment(lib,"ws2_32.lib") 16 | #include "Global.h" 17 | 18 | #define WM_ADD_FIND_SERVER WM_USER + 1 19 | 20 | // CNetworkDlg 对话框 21 | 22 | IMPLEMENT_DYNAMIC(CNetworkDlg, CDialogEx) 23 | 24 | CNetworkDlg::CNetworkDlg(CWnd* pParent /*=nullptr*/) 25 | : CDialogEx(IDD_NETWORK_DIALOG, pParent) 26 | , m_edit_ip(_T("")) 27 | , m_edit_port(_T("")) { 28 | 29 | } 30 | 31 | CNetworkDlg::~CNetworkDlg() { 32 | } 33 | 34 | void CNetworkDlg::DoDataExchange(CDataExchange* pDX) { 35 | CDialogEx::DoDataExchange(pDX); 36 | DDX_Control(pDX, IDC_LIST_FIND_SERVER, m_list_find_server); 37 | DDX_Text(pDX, IDC_EDIT_IP, m_edit_ip); 38 | DDX_Text(pDX, IDC_EDIT_PORT, m_edit_port); 39 | } 40 | 41 | 42 | BEGIN_MESSAGE_MAP(CNetworkDlg, CDialogEx) 43 | ON_WM_CLOSE() 44 | ON_WM_DESTROY() 45 | ON_WM_SIZE() 46 | ON_WM_TIMER() 47 | ON_BN_CLICKED(IDC_CONNECT, &CNetworkDlg::OnBnClickedConnect) 48 | ON_BN_CLICKED(IDC_CANCEL, &CNetworkDlg::OnBnClickedCancel) 49 | ON_MESSAGE(WM_ADD_FIND_SERVER, OnAddFindServer) 50 | ON_NOTIFY(HDN_ITEMCLICK, 0, &CNetworkDlg::OnItemclickListFindServer) 51 | ON_NOTIFY(NM_CLICK, IDC_LIST_FIND_SERVER, &CNetworkDlg::OnClickListFindServer) 52 | ON_NOTIFY(NM_DBLCLK, IDC_LIST_FIND_SERVER, &CNetworkDlg::OnDblclkListFindServer) 53 | END_MESSAGE_MAP() 54 | 55 | // CNetworkDlg 消息处理程序 56 | 57 | //测试服务器端口是否开放 58 | void TestIdentifierThread(std::unique_ptr ip, HWND resultHwnd) { 59 | SOCKET skServer = socket(PF_INET, SOCK_DGRAM, 0); 60 | sockaddr_in addr; 61 | addr.sin_family = PF_INET; 62 | addr.sin_port = htons(3290); 63 | addr.sin_addr.S_un.S_addr = inet_addr(ip.get()); 64 | BOOL bSuccess = (connect(skServer, (sockaddr*)&addr, sizeof(sockaddr_in)) == 0) ? TRUE : FALSE; 65 | 66 | if (bSuccess && IsWindow(resultHwnd)) { 67 | #pragma pack(1) 68 | struct { 69 | uint32_t checksum; 70 | uint16_t port; 71 | } packet; 72 | #pragma pack() 73 | 74 | struct sockaddr_in addr_client = { 0 }; 75 | addr_client.sin_family = PF_INET; 76 | addr_client.sin_addr.s_addr = inet_addr(ip.get()); 77 | addr_client.sin_port = htons(3290); 78 | 79 | socklen_t clisize = sizeof(addr_client); 80 | 81 | packet.checksum = 1; 82 | packet.port = 3290; 83 | if (sendto(skServer, (const char*)&packet, sizeof(packet), 0, (struct sockaddr *)&addr_client, (int)&clisize) > 0) { 84 | if (recvfrom(skServer, (char*)&packet, sizeof(packet), 0, (struct sockaddr *)&addr_client, &clisize) > 0) { 85 | if (packet.checksum == 0xce) { 86 | //找到testHwBpServer了,通知主界面显示 87 | ::PostMessage(resultHwnd, WM_ADD_FIND_SERVER, (WPARAM)ip.release(), packet.port); 88 | } 89 | } 90 | } 91 | } 92 | closesocket(skServer); 93 | 94 | return; 95 | } 96 | //探测可连接的服务器地址 97 | BOOL GetHwServerIP(HWND resultHwnd) { 98 | //IP_ADAPTER_INFO结构体 99 | PIP_ADAPTER_INFO pIpAdapterInfo = NULL; 100 | pIpAdapterInfo = new IP_ADAPTER_INFO; 101 | 102 | //结构体大小 103 | unsigned long ulSize = sizeof(IP_ADAPTER_INFO); 104 | 105 | //获取适配器信息 106 | int nRet = GetAdaptersInfo(pIpAdapterInfo, &ulSize); 107 | 108 | if (ERROR_BUFFER_OVERFLOW == nRet) { 109 | //空间不足,删除之前分配的空间 110 | delete[]pIpAdapterInfo; 111 | 112 | //重新分配大小 113 | pIpAdapterInfo = (PIP_ADAPTER_INFO) new BYTE[ulSize]; 114 | 115 | //获取适配器信息 116 | nRet = GetAdaptersInfo(pIpAdapterInfo, &ulSize); 117 | 118 | //获取失败 119 | if (ERROR_SUCCESS != nRet) { 120 | if (pIpAdapterInfo != NULL) { 121 | delete[]pIpAdapterInfo; 122 | } 123 | return FALSE; 124 | } 125 | } 126 | 127 | //MAC 地址信息 128 | //char szMacAddr[20]; 129 | //赋值指针 130 | PIP_ADAPTER_INFO pIterater = pIpAdapterInfo; 131 | while (pIterater) { 132 | //cout << "网卡名称:" << pIterater->AdapterName << endl; 133 | 134 | //cout << "网卡描述:" << pIterater->Description << endl; 135 | 136 | /*sprintf_s(szMacAddr, 20, "%02X-%02X-%02X-%02X-%02X-%02X", 137 | pIterater->Address[0], 138 | pIterater->Address[1], 139 | pIterater->Address[2], 140 | pIterater->Address[3], 141 | pIterater->Address[4], 142 | pIterater->Address[5]);*/ 143 | 144 | //cout << "MAC 地址:" << szMacAddr << endl; 145 | 146 | //cout << "IP地址列表:" << endl << endl; 147 | 148 | //指向IP地址列表 149 | PIP_ADDR_STRING pIpAddr = &pIterater->IpAddressList; 150 | while (pIpAddr) { 151 | //cout << "IP地址: " << pIpAddr->IpAddress.String << endl; 152 | //cout << "子网掩码:" << pIpAddr->IpMask.String << endl; 153 | 154 | //指向网关列表 155 | PIP_ADDR_STRING pGateAwayList = &pIterater->GatewayList; 156 | while (pGateAwayList) { 157 | //cout << "网关: " << pGateAwayList->IpAddress.String << endl; 158 | 159 | if (strcmp(pGateAwayList->IpAddress.String, "0.0.0.0") != 0) { 160 | //测试是否可连接 161 | std::unique_ptr temIP = std::make_unique(256); 162 | memset(temIP.get(), 0, 256); 163 | strcpy(temIP.get(), pGateAwayList->IpAddress.String); 164 | 165 | std::thread td(TestIdentifierThread, std::move(temIP), resultHwnd); 166 | td.detach(); 167 | } 168 | 169 | pGateAwayList = pGateAwayList->Next; 170 | } 171 | 172 | pIpAddr = pIpAddr->Next; 173 | } 174 | //cout << endl << "--------------------------------------------------" << endl; 175 | 176 | pIterater = pIterater->Next; 177 | } 178 | 179 | //清理 180 | if (pIpAdapterInfo) { 181 | delete[]pIpAdapterInfo; 182 | } 183 | 184 | 185 | 186 | return TRUE; 187 | } 188 | 189 | BOOL CNetworkDlg::OnInitDialog() { 190 | CDialogEx::OnInitDialog(); 191 | 192 | // TODO: 在此添加额外的初始化 193 | 194 | 195 | //初始化列表框 196 | LONG lStyle; 197 | lStyle = GetWindowLong(m_list_find_server.m_hWnd, GWL_STYLE); 198 | lStyle &= ~LVS_TYPEMASK; //清除显示方式位 199 | lStyle |= LVS_REPORT; 200 | SetWindowLong(m_list_find_server.m_hWnd, GWL_STYLE, lStyle); 201 | DWORD dwStyle = m_list_find_server.GetExtendedStyle(); 202 | dwStyle |= LVS_EX_FULLROWSELECT;//选中某行使整行高亮(只适用与report风格的listctrl) 203 | dwStyle |= LVS_EX_GRIDLINES;//网格线(只适用与report风格的listctrl) 204 | //dwStyle |= LVS_EX_CHECKBOXES;//item前生成checkbox控件 205 | m_list_find_server.SetExtendedStyle(dwStyle); 206 | 207 | m_list_find_server.InsertColumn(0, L"IP", LVCFMT_LEFT, 200);//插入列 208 | m_list_find_server.InsertColumn(1, L"端口", LVCFMT_LEFT, 200); 209 | 210 | //探测可连接的服务器地址 211 | GetHwServerIP(m_hWnd); 212 | return TRUE; // return TRUE unless you set the focus to a control 213 | // 异常: OCX 属性页应返回 FALSE 214 | } 215 | 216 | 217 | BOOL CNetworkDlg::PreTranslateMessage(MSG* pMsg) { 218 | // TODO: 在此添加专用代码和/或调用基类 219 | 220 | return CDialogEx::PreTranslateMessage(pMsg); 221 | } 222 | 223 | 224 | void CNetworkDlg::OnClose() { 225 | // TODO: 在此添加消息处理程序代码和/或调用默认值 226 | 227 | CDialogEx::OnClose(); 228 | } 229 | 230 | 231 | void CNetworkDlg::OnDestroy() { 232 | CDialogEx::OnDestroy(); 233 | 234 | // TODO: 在此处添加消息处理程序代码 235 | } 236 | 237 | 238 | void CNetworkDlg::OnSize(UINT nType, int cx, int cy) { 239 | CDialogEx::OnSize(nType, cx, cy); 240 | 241 | // TODO: 在此处添加消息处理程序代码 242 | } 243 | 244 | 245 | void CNetworkDlg::OnTimer(UINT_PTR nIDEvent) { 246 | // TODO: 在此添加消息处理程序代码和/或调用默认值 247 | 248 | CDialogEx::OnTimer(nIDEvent); 249 | } 250 | 251 | 252 | void CNetworkDlg::OnBnClickedConnect() { 253 | // TODO: 在此添加控件通知处理程序代码 254 | UpdateData(TRUE); 255 | if (m_edit_ip.IsEmpty() || m_edit_port.IsEmpty()) { 256 | MessageBox(L"IP或端口不能为空"); 257 | return; 258 | } 259 | if (!g_NetworkManager.ConnectHwBpServer(ws2s(m_edit_ip.GetBuffer(0)), _wtoi(m_edit_port.GetBuffer(0)))) { 260 | MessageBox(L"连接失败"); 261 | return; 262 | } 263 | OnOK(); 264 | } 265 | 266 | 267 | void CNetworkDlg::OnBnClickedCancel() { 268 | // TODO: 在此添加控件通知处理程序代码 269 | OnOK(); 270 | } 271 | 272 | LRESULT CNetworkDlg::OnAddFindServer(WPARAM wParam, LPARAM lParam) { 273 | std::unique_ptr myMsgParam((char*)wParam); 274 | 275 | //显示IP地址 276 | int nCount = m_list_find_server.GetItemCount(); 277 | m_list_find_server.InsertItem(nCount, s2ws(myMsgParam.get()).c_str()); 278 | 279 | //显示端口号 280 | std::stringstream ssConvert; 281 | ssConvert << (size_t)lParam; 282 | m_list_find_server.SetItemText(nCount, 1, s2ws(ssConvert.str()).c_str()); 283 | 284 | return 0; 285 | } 286 | 287 | 288 | void CNetworkDlg::OnItemclickListFindServer(NMHDR *pNMHDR, LRESULT *pResult) { 289 | LPNMHEADER phdr = reinterpret_cast(pNMHDR); 290 | // TODO: 在此添加控件通知处理程序代码 291 | *pResult = 0; 292 | } 293 | 294 | 295 | void CNetworkDlg::OnClickListFindServer(NMHDR *pNMHDR, LRESULT *pResult) { 296 | LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast(pNMHDR); 297 | if (pNMItemActivate->iItem != -1) { 298 | //按下了列表 299 | m_edit_ip = m_list_find_server.GetItemText(pNMItemActivate->iItem, 0); 300 | m_edit_port = m_list_find_server.GetItemText(pNMItemActivate->iItem, 1); 301 | UpdateData(FALSE); 302 | } 303 | *pResult = 0; 304 | } 305 | 306 | 307 | void CNetworkDlg::OnDblclkListFindServer(NMHDR *pNMHDR, LRESULT *pResult) { 308 | LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast(pNMHDR); 309 | if (pNMItemActivate->iItem != -1) { 310 | //按下了列表 311 | m_edit_ip = m_list_find_server.GetItemText(pNMItemActivate->iItem, 0); 312 | m_edit_port = m_list_find_server.GetItemText(pNMItemActivate->iItem, 1); 313 | UpdateData(FALSE); 314 | //开始连接 315 | OnBnClickedConnect(); 316 | } 317 | *pResult = 0; 318 | } 319 | -------------------------------------------------------------------------------- /Client/NetworkDlg.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | 4 | // CNetworkDlg 对话框 5 | 6 | class CNetworkDlg : public CDialogEx { 7 | DECLARE_DYNAMIC(CNetworkDlg) 8 | 9 | public: 10 | CNetworkDlg(CWnd* pParent = nullptr); // 标准构造函数 11 | virtual ~CNetworkDlg(); 12 | 13 | // 对话框数据 14 | #ifdef AFX_DESIGN_TIME 15 | enum { IDD = IDD_NETWORK_DIALOG }; 16 | #endif 17 | 18 | protected: 19 | virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 20 | 21 | DECLARE_MESSAGE_MAP() 22 | 23 | public: 24 | virtual BOOL OnInitDialog(); 25 | virtual BOOL PreTranslateMessage(MSG* pMsg); 26 | afx_msg void OnClose(); 27 | afx_msg void OnDestroy(); 28 | afx_msg void OnSize(UINT nType, int cx, int cy); 29 | afx_msg void OnTimer(UINT_PTR nIDEvent); 30 | afx_msg void OnBnClickedConnect(); 31 | afx_msg void OnBnClickedCancel(); 32 | afx_msg LRESULT OnAddFindServer(WPARAM wParam, LPARAM lParam); 33 | afx_msg void OnItemclickListFindServer(NMHDR *pNMHDR, LRESULT *pResult); 34 | afx_msg void OnClickListFindServer(NMHDR *pNMHDR, LRESULT *pResult); 35 | afx_msg void OnDblclkListFindServer(NMHDR *pNMHDR, LRESULT *pResult); 36 | private: 37 | CListCtrl m_list_find_server; 38 | CString m_edit_ip; 39 | CString m_edit_port; 40 | }; 41 | -------------------------------------------------------------------------------- /Client/NetworkManager.cpp: -------------------------------------------------------------------------------- 1 | #include "pch.h" 2 | #include "NetworkManager.h" 3 | #include "../testHwBpServer/hwbpserver.h" 4 | #include "Global.h" 5 | CNetworkManager::CNetworkManager() { 6 | WSADATA wsadata; 7 | WSAStartup(MAKEWORD(2, 2), &wsadata); 8 | m_skServer = NULL; 9 | } 10 | CNetworkManager::~CNetworkManager() { 11 | if (m_skServer) { 12 | closesocket(m_skServer); 13 | } 14 | WSACleanup(); 15 | } 16 | bool CNetworkManager::ConnectHwBpServer(std::string ip, int port) { 17 | m_ip = ip; 18 | m_port = port; 19 | 20 | if (m_skServer) { 21 | closesocket(m_skServer); 22 | m_skServer = NULL; 23 | } 24 | 25 | if (m_ip.empty() || port == 0) { 26 | return false; 27 | } 28 | m_skServer = socket(AF_INET, SOCK_STREAM, 0); 29 | sockaddr_in addr; 30 | addr.sin_family = AF_INET; 31 | addr.sin_port = htons(port); 32 | addr.sin_addr.S_un.S_addr = inet_addr(ip.c_str()); 33 | if (connect(m_skServer, (sockaddr*)&addr, sizeof(sockaddr_in)) != 0) { 34 | closesocket(m_skServer); 35 | m_skServer = NULL; 36 | return false; 37 | } 38 | return true; 39 | } 40 | bool CNetworkManager::IsConnected() { 41 | return m_skServer ? true : false; 42 | } 43 | void CNetworkManager::Disconnect() { 44 | if (m_skServer) { 45 | closesocket(m_skServer); 46 | m_skServer = NULL; 47 | } 48 | } 49 | bool CNetworkManager::Reconnect() { 50 | return ConnectHwBpServer(m_ip, m_port); 51 | } 52 | bool CNetworkManager::SetHwBpHitConditions(HIT_CONDITIONS hitConditions) { 53 | if (!m_skServer) { 54 | return false; 55 | } 56 | 57 | unsigned char command = CMD_SETHITCONDITIONS; 58 | if (sendall(m_skServer, (char*)&command, 1, 0) <= 0) { 59 | closesocket(m_skServer); 60 | m_skServer = NULL; 61 | return false; 62 | } 63 | 64 | if (sendall(m_skServer, &hitConditions, sizeof(hitConditions), 0) > 0) { 65 | int result = 0; 66 | if (recvall(m_skServer, &result, sizeof(result), MSG_WAITALL) > 0) { 67 | return result == 1 ? true : false; 68 | } 69 | } 70 | return false; 71 | } 72 | bool CNetworkManager::AddProcessHwBp( 73 | uint32_t pid, 74 | uint64_t address, 75 | uint32_t hwBpAddrLen, 76 | uint32_t hwBpAddrType, 77 | uint32_t hwBpThreadType, 78 | uint32_t hwBpKeepTimeMs, 79 | uint32_t & allTaskCount, 80 | uint32_t & insHwBpSuccessTaskCount, 81 | std::vector & vHitResult) { 82 | vHitResult.clear(); 83 | if (!m_skServer) { 84 | return false; 85 | } 86 | 87 | unsigned char command = CMD_ADDPROCESSHWBP; 88 | if (sendall(m_skServer, (char*)&command, 1, 0) <= 0) { 89 | closesocket(m_skServer); 90 | m_skServer = NULL; 91 | return false; 92 | } 93 | 94 | AddProcessHwBpInfo hwbpInfo = { 0 }; 95 | hwbpInfo.pid = pid; 96 | hwbpInfo.address = address; 97 | hwbpInfo.hwBpAddrLen = hwBpAddrLen; 98 | hwbpInfo.hwBpAddrType = hwBpAddrType; 99 | hwbpInfo.hwBpThreadType = hwBpThreadType; 100 | hwbpInfo.hwBpKeepTimeMs = hwBpKeepTimeMs; 101 | if (sendall(m_skServer, &hwbpInfo, sizeof(hwbpInfo), 0) > 0) { 102 | #pragma pack(1) 103 | struct { 104 | uint32_t allTaskCount; 105 | uint32_t insHwBpSuccessTaskCount; 106 | uint32_t hit_count; 107 | } result; 108 | #pragma pack() 109 | if (recvall(m_skServer, &result, sizeof(result), MSG_WAITALL) > 0) { 110 | for (; result.hit_count > 0; result.hit_count--) { 111 | USER_HIT_INFO newHit = { 0 }; 112 | if (recvall(m_skServer, &newHit, sizeof(newHit), MSG_WAITALL) > 0) { 113 | vHitResult.push_back(newHit); 114 | } 115 | } 116 | allTaskCount = result.allTaskCount; 117 | insHwBpSuccessTaskCount = result.insHwBpSuccessTaskCount; 118 | return true; 119 | } 120 | } 121 | return false; 122 | } -------------------------------------------------------------------------------- /Client/NetworkManager.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SsageParuders/Android_Kernel_hwBreakPoint/057a92392e17f7c18896084eba4dd2d6a91abfa9/Client/NetworkManager.h -------------------------------------------------------------------------------- /Client/TextViewDlg.cpp: -------------------------------------------------------------------------------- 1 | // TextViewDlg.cpp: 实现文件 2 | // 3 | 4 | #include "pch.h" 5 | #include "testHwBpClient.h" 6 | #include "TextViewDlg.h" 7 | #include "afxdialogex.h" 8 | 9 | 10 | // CTextViewDlg 对话框 11 | 12 | IMPLEMENT_DYNAMIC(CTextViewDlg, CDialogEx) 13 | 14 | CTextViewDlg::CTextViewDlg(CString title, CString text) 15 | : CDialogEx(IDD_TEXT_VIEW_DIALOG, GetDesktopWindow()) { 16 | m_title = title; 17 | m_edit_text = text; 18 | } 19 | 20 | CTextViewDlg::~CTextViewDlg() { 21 | } 22 | 23 | void CTextViewDlg::DoDataExchange(CDataExchange* pDX) { 24 | CDialogEx::DoDataExchange(pDX); 25 | DDX_Text(pDX, IDC_EDIT_TEXT, m_edit_text); 26 | } 27 | 28 | 29 | BEGIN_MESSAGE_MAP(CTextViewDlg, CDialogEx) 30 | ON_WM_CLOSE() 31 | ON_WM_DESTROY() 32 | ON_WM_SIZE() 33 | END_MESSAGE_MAP() 34 | 35 | 36 | // CTextViewDlg 消息处理程序 37 | 38 | 39 | BOOL CTextViewDlg::OnInitDialog() { 40 | CDialogEx::OnInitDialog(); 41 | 42 | // TODO: 在此添加额外的初始化 43 | 44 | UpdateData(FALSE); 45 | 46 | m_font.CreateFont(16, 0, 0, 0, FW_EXTRABOLD, FALSE, FALSE, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, 47 | CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_MODERN, 48 | L"新宋体"); 49 | 50 | GetDlgItem(IDC_EDIT_TEXT)->SetFont(&m_font); 51 | 52 | SetWindowTextW(m_title); 53 | return TRUE; // return TRUE unless you set the focus to a control 54 | // 异常: OCX 属性页应返回 FALSE 55 | } 56 | 57 | 58 | BOOL CTextViewDlg::PreTranslateMessage(MSG* pMsg) { 59 | // TODO: 在此添加专用代码和/或调用基类 60 | 61 | return CDialogEx::PreTranslateMessage(pMsg); 62 | } 63 | 64 | 65 | void CTextViewDlg::OnClose() { 66 | // TODO: 在此添加消息处理程序代码和/或调用默认值 67 | 68 | CDialogEx::OnClose(); 69 | } 70 | 71 | 72 | void CTextViewDlg::OnDestroy() { 73 | CDialogEx::OnDestroy(); 74 | 75 | // TODO: 在此处添加消息处理程序代码 76 | } 77 | 78 | 79 | void CTextViewDlg::OnSize(UINT nType, int cx, int cy) { 80 | CDialogEx::OnSize(nType, cx, cy); 81 | 82 | CWnd * edit = GetDlgItem(IDC_EDIT_TEXT); 83 | if (edit) { 84 | ::SetWindowPos(edit->m_hWnd, NULL, 0, 0, cx, cy, SWP_NOMOVE); 85 | } 86 | } 87 | -------------------------------------------------------------------------------- /Client/TextViewDlg.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | 4 | // CTextViewDlg 对话框 5 | 6 | class CTextViewDlg : public CDialogEx 7 | { 8 | DECLARE_DYNAMIC(CTextViewDlg) 9 | 10 | public: 11 | CTextViewDlg(CString title,CString text); // 标准构造函数 12 | virtual ~CTextViewDlg(); 13 | 14 | // 对话框数据 15 | #ifdef AFX_DESIGN_TIME 16 | enum { IDD = IDD_TEXT_VIEW_DIALOG }; 17 | #endif 18 | 19 | protected: 20 | virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 21 | 22 | DECLARE_MESSAGE_MAP() 23 | 24 | public: 25 | virtual BOOL OnInitDialog(); 26 | virtual BOOL PreTranslateMessage(MSG* pMsg); 27 | afx_msg void OnClose(); 28 | afx_msg void OnDestroy(); 29 | afx_msg void OnSize(UINT nType, int cx, int cy); 30 | 31 | private: 32 | CString m_title; 33 | CString m_edit_text; 34 | CFont m_font; 35 | 36 | }; 37 | -------------------------------------------------------------------------------- /Client/framework.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #ifndef VC_EXTRALEAN 4 | #define VC_EXTRALEAN // 从 Windows 头中排除极少使用的资料 5 | #endif 6 | 7 | #include "targetver.h" 8 | 9 | #define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // 某些 CString 构造函数将是显式的 10 | 11 | // 关闭 MFC 的一些常见且经常可放心忽略的隐藏警告消息 12 | #define _AFX_ALL_WARNINGS 13 | 14 | #include // MFC 核心组件和标准组件 15 | #include // MFC 扩展 16 | 17 | 18 | #include // MFC 自动化类 19 | 20 | 21 | 22 | #ifndef _AFX_NO_OLE_SUPPORT 23 | #include // MFC 对 Internet Explorer 4 公共控件的支持 24 | #endif 25 | #ifndef _AFX_NO_AFXCMN_SUPPORT 26 | #include // MFC 对 Windows 公共控件的支持 27 | #endif // _AFX_NO_AFXCMN_SUPPORT 28 | 29 | #include // MFC 支持功能区和控制条 30 | 31 | 32 | #include // MFC 套接字扩展 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | #ifdef _UNICODE 41 | #if defined _M_IX86 42 | #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"") 43 | #elif defined _M_X64 44 | #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"") 45 | #else 46 | #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"") 47 | #endif 48 | #endif 49 | 50 | 51 | -------------------------------------------------------------------------------- /Client/pch.cpp: -------------------------------------------------------------------------------- 1 | // pch.cpp: 与预编译标头对应的源文件 2 | 3 | #include "pch.h" 4 | 5 | // 当使用预编译的头时,需要使用此源文件,编译才能成功。 6 | -------------------------------------------------------------------------------- /Client/pch.h: -------------------------------------------------------------------------------- 1 | // pch.h: 这是预编译标头文件。 2 | // 下方列出的文件仅编译一次,提高了将来生成的生成性能。 3 | // 这还将影响 IntelliSense 性能,包括代码完成和许多代码浏览功能。 4 | // 但是,如果此处列出的文件中的任何一个在生成之间有更新,它们全部都将被重新编译。 5 | // 请勿在此处添加要频繁更新的文件,这将使得性能优势无效。 6 | 7 | #ifndef PCH_H 8 | #define PCH_H 9 | 10 | // 添加要在此处预编译的标头 11 | #include "framework.h" 12 | #include 13 | #include 14 | 15 | #endif //PCH_H 16 | -------------------------------------------------------------------------------- /Client/release/x64/Kernel_hwBp_Client.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SsageParuders/Android_Kernel_hwBreakPoint/057a92392e17f7c18896084eba4dd2d6a91abfa9/Client/release/x64/Kernel_hwBp_Client.exe -------------------------------------------------------------------------------- /Client/res/testHwBpClient.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SsageParuders/Android_Kernel_hwBreakPoint/057a92392e17f7c18896084eba4dd2d6a91abfa9/Client/res/testHwBpClient.ico -------------------------------------------------------------------------------- /Client/res/testHwBpClient.rc2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SsageParuders/Android_Kernel_hwBreakPoint/057a92392e17f7c18896084eba4dd2d6a91abfa9/Client/res/testHwBpClient.rc2 -------------------------------------------------------------------------------- /Client/resource.h: -------------------------------------------------------------------------------- 1 | //{{NO_DEPENDENCIES}} 2 | // Microsoft Visual C++ 生成的包含文件。 3 | // 供 testHwBpClient.rc 使用 4 | // 5 | #define IDM_ABOUTBOX 0x0010 6 | #define IDD_ABOUTBOX 100 7 | #define IDS_ABOUTBOX 101 8 | #define IDD_TESTHWBPCLIENT_DIALOG 102 9 | #define IDP_SOCKETS_INIT_FAILED 103 10 | #define IDR_MAINFRAME 128 11 | #define IDD_NETWORK_DIALOG 129 12 | #define IDD_TEXT_VIEW_DIALOG 132 13 | #define IDR_MENU_LIST 134 14 | #define IDC_EDIT_PID 1000 15 | #define IDC_LIST_FIND_SERVER 1001 16 | #define IDC_RADIO_TYPE_R 1001 17 | #define IDC_RADIO_TYPE_W 1002 18 | #define IDC_EDIT_TEXT 1002 19 | #define IDC_RADIO_TYPE_RW 1003 20 | #define IDC_LIST_RESULT 1004 21 | #define IDC_RADIO_TYPE_X 1005 22 | #define IDC_BUTTON_ADD_HWBP 1006 23 | #define IDC_EDIT_ADDR 1007 24 | #define IDC_CANCEL 1008 25 | #define IDC_RADIO_LEN_4 1008 26 | #define IDC_RADIO_LEN_8 1009 27 | #define IDC_CHECK_X0 1010 28 | #define IDC_RADIO_REGION_ALL_THREAD 1011 29 | #define IDC_RADIO_REGION_MAIN_OTHER_THREAD 1012 30 | #define IDC_RADIO_REGION_MAIN_THREAD 1013 31 | #define IDC_CHECK_PID_HEX 1014 32 | #define IDC_CHECK_ADDR_HEX 1015 33 | #define IDC_EDIT_KEEP_TIME 1016 34 | #define IDC_EDIT_X0 1017 35 | #define IDC_CONNECT 1018 36 | #define IDC_CHECK_X1 1018 37 | #define IDC_EDIT_IP 1019 38 | #define IDC_EDIT_X1 1019 39 | #define IDC_EDIT_PORT 1020 40 | #define IDC_CHECK_X2 1020 41 | #define IDC_EDIT_X2 1021 42 | #define IDC_CHECK_X3 1022 43 | #define IDC_EDIT_X3 1023 44 | #define IDC_CHECK_X6 1024 45 | #define IDC_EDIT_X6 1025 46 | #define IDC_CHECK_X7 1026 47 | #define IDC_EDIT_X7 1027 48 | #define IDC_CHECK_X5 1028 49 | #define IDC_EDIT_X5 1029 50 | #define IDC_CHECK_X8 1030 51 | #define IDC_EDIT_X8 1031 52 | #define IDC_CHECK_X4 1034 53 | #define IDC_EDIT_X4 1035 54 | #define IDC_CHECK_X9 1038 55 | #define IDC_EDIT_X9 1039 56 | #define IDC_CHECK_X10 1040 57 | #define IDC_EDIT_X10 1041 58 | #define IDC_CHECK_X11 1042 59 | #define IDC_EDIT_X11 1043 60 | #define IDC_CHECK_X12 1044 61 | #define IDC_EDIT_X12 1045 62 | #define IDC_CHECK_X13 1046 63 | #define IDC_EDIT_X13 1047 64 | #define IDC_CHECK_X16 1048 65 | #define IDC_EDIT_X16 1049 66 | #define IDC_CHECK_X17 1050 67 | #define IDC_EDIT_X17 1051 68 | #define IDC_CHECK_X15 1052 69 | #define IDC_EDIT_X15 1053 70 | #define IDC_CHECK_X18 1054 71 | #define IDC_EDIT_X18 1055 72 | #define IDC_CHECK_X14 1056 73 | #define IDC_EDIT_X14 1057 74 | #define IDC_CHECK_X19 1058 75 | #define IDC_EDIT_X19 1059 76 | #define IDC_CHECK_X21 1090 77 | #define IDC_EDIT_X21 1091 78 | #define IDC_CHECK_X22 1092 79 | #define IDC_EDIT_X22 1093 80 | #define IDC_CHECK_X20 1094 81 | #define IDC_EDIT_X20 1095 82 | #define IDC_CHECK_X23 1096 83 | #define IDC_EDIT_X23 1097 84 | #define IDC_CHECK_X24 1098 85 | #define IDC_EDIT_X24 1099 86 | #define IDC_CHECK_X25 1100 87 | #define IDC_EDIT_X25 1101 88 | #define IDC_CHECK_X26 1102 89 | #define IDC_EDIT_X26 1103 90 | #define IDC_CHECK_X27 1104 91 | #define IDC_EDIT_X27 1105 92 | #define IDC_CHECK_X28 1106 93 | #define IDC_EDIT_X28 1107 94 | #define IDC_CHECK_SP 1108 95 | #define IDC_EDIT_SP 1109 96 | #define IDC_CHECK_PC 1110 97 | #define IDC_EDIT_PC 1111 98 | #define IDC_CHECK_X30 1112 99 | #define IDC_EDIT_X30 1113 100 | #define IDC_CHECK_PSTATE 1114 101 | #define IDC_EDIT_PSTATE 1115 102 | #define IDC_CHECK_X29 1116 103 | #define IDC_EDIT_X29 1117 104 | #define IDC_CHECK_ORIG_X0 1118 105 | #define IDC_EDIT_ORIG_X0 1119 106 | #define IDC_CHECK_SYSCALLNO 1120 107 | #define IDC_EDIT_SYSCALLNO 1121 108 | #define ID_32771 32771 109 | #define ID_MENUITEM_CLEAN 32772 110 | #define ID_MENUITEM_CLEAN_LIST 32773 111 | #define ID_32774 32774 112 | #define ID_MENUITEM_DELETE_THIS_COUNT 32775 113 | #define ID_32776 32776 114 | #define ID_32777 32777 115 | #define ID_32778 32778 116 | #define ID_MENUITEM_DELETE_OTHER_COUNT 32779 117 | #define ID_MENUITEM_DELETE_UP_COUNT 32780 118 | #define ID_MENUITEM_DELETE_DOWN_COUNT 32781 119 | #define ID_MENUITEM_DELETE_SELECTED_COUNT 32782 120 | 121 | // Next default values for new objects 122 | // 123 | #ifdef APSTUDIO_INVOKED 124 | #ifndef APSTUDIO_READONLY_SYMBOLS 125 | #define _APS_NEXT_RESOURCE_VALUE 135 126 | #define _APS_NEXT_COMMAND_VALUE 32783 127 | #define _APS_NEXT_CONTROL_VALUE 1033 128 | #define _APS_NEXT_SYMED_VALUE 101 129 | #endif 130 | #endif 131 | -------------------------------------------------------------------------------- /Client/targetver.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | // 包括 SDKDDKVer.h 将定义可用的最高版本的 Windows 平台。 4 | 5 | // 如果要为以前的 Windows 平台生成应用程序,请包括 WinSDKVer.h,并将 6 | // 将 _WIN32_WINNT 宏设置为要支持的平台,然后再包括 SDKDDKVer.h。 7 | 8 | #include 9 | -------------------------------------------------------------------------------- /Client/testHwBpClient.aps: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SsageParuders/Android_Kernel_hwBreakPoint/057a92392e17f7c18896084eba4dd2d6a91abfa9/Client/testHwBpClient.aps -------------------------------------------------------------------------------- /Client/testHwBpClient.cpp: -------------------------------------------------------------------------------- 1 |  2 | // testHwBpClient.cpp: 定义应用程序的类行为。 3 | // 4 | 5 | #include "pch.h" 6 | #include "framework.h" 7 | #include "testHwBpClient.h" 8 | #include "testHwBpClientDlg.h" 9 | #include "NetworkDlg.h" 10 | #include "Global.h" 11 | #ifdef _DEBUG 12 | #define new DEBUG_NEW 13 | #endif 14 | 15 | 16 | // CtestHwBpClientApp 17 | 18 | BEGIN_MESSAGE_MAP(CtestHwBpClientApp, CWinApp) 19 | ON_COMMAND(ID_HELP, &CWinApp::OnHelp) 20 | END_MESSAGE_MAP() 21 | 22 | 23 | // CtestHwBpClientApp 构造 24 | 25 | CtestHwBpClientApp::CtestHwBpClientApp() { 26 | // 支持重新启动管理器 27 | m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_RESTART; 28 | 29 | // TODO: 在此处添加构造代码, 30 | // 将所有重要的初始化放置在 InitInstance 中 31 | } 32 | 33 | 34 | // 唯一的 CtestHwBpClientApp 对象 35 | 36 | CtestHwBpClientApp theApp; 37 | 38 | 39 | // CtestHwBpClientApp 初始化 40 | 41 | BOOL CtestHwBpClientApp::InitInstance() { 42 | // 如果一个运行在 Windows XP 上的应用程序清单指定要 43 | // 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式, 44 | //则需要 InitCommonControlsEx()。 否则,将无法创建窗口。 45 | INITCOMMONCONTROLSEX InitCtrls; 46 | InitCtrls.dwSize = sizeof(InitCtrls); 47 | // 将它设置为包括所有要在应用程序中使用的 48 | // 公共控件类。 49 | InitCtrls.dwICC = ICC_WIN95_CLASSES; 50 | InitCommonControlsEx(&InitCtrls); 51 | 52 | CWinApp::InitInstance(); 53 | 54 | if (!AfxSocketInit()) { 55 | AfxMessageBox(IDP_SOCKETS_INIT_FAILED); 56 | return FALSE; 57 | } 58 | 59 | 60 | AfxEnableControlContainer(); 61 | 62 | // 创建 shell 管理器,以防对话框包含 63 | // 任何 shell 树视图控件或 shell 列表视图控件。 64 | CShellManager *pShellManager = new CShellManager; 65 | 66 | // 激活“Windows Native”视觉管理器,以便在 MFC 控件中启用主题 67 | CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows)); 68 | 69 | // 标准初始化 70 | // 如果未使用这些功能并希望减小 71 | // 最终可执行文件的大小,则应移除下列 72 | // 不需要的特定初始化例程 73 | // 更改用于存储设置的注册表项 74 | // TODO: 应适当修改该字符串, 75 | // 例如修改为公司或组织名 76 | SetRegistryKey(_T("应用程序向导生成的本地应用程序")); 77 | 78 | CNetworkDlg networkDlg; 79 | networkDlg.DoModal(); 80 | 81 | INT_PTR nResponse = 0; 82 | 83 | if (g_NetworkManager.IsConnected()) { 84 | //网络连接成功,载入主窗口 85 | g_NetworkManager.Disconnect(); 86 | 87 | CtestHwBpClientDlg dlg; 88 | m_pMainWnd = &dlg; 89 | nResponse = dlg.DoModal(); 90 | } 91 | if (nResponse == IDOK) { 92 | // TODO: 在此放置处理何时用 93 | // “确定”来关闭对话框的代码 94 | } else if (nResponse == IDCANCEL) { 95 | // TODO: 在此放置处理何时用 96 | // “取消”来关闭对话框的代码 97 | } else if (nResponse == -1) { 98 | TRACE(traceAppMsg, 0, "警告: 对话框创建失败,应用程序将意外终止。\n"); 99 | TRACE(traceAppMsg, 0, "警告: 如果您在对话框上使用 MFC 控件,则无法 #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS。\n"); 100 | } 101 | 102 | // 删除上面创建的 shell 管理器。 103 | if (pShellManager != nullptr) { 104 | delete pShellManager; 105 | } 106 | 107 | #if !defined(_AFXDLL) && !defined(_AFX_NO_MFC_CONTROLS_IN_DIALOGS) 108 | ControlBarCleanUp(); 109 | #endif 110 | 111 | // 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序, 112 | // 而不是启动应用程序的消息泵。 113 | return FALSE; 114 | } 115 | 116 | -------------------------------------------------------------------------------- /Client/testHwBpClient.h: -------------------------------------------------------------------------------- 1 |  2 | // testHwBpClient.h: PROJECT_NAME 应用程序的主头文件 3 | // 4 | 5 | #pragma once 6 | 7 | #ifndef __AFXWIN_H__ 8 | #error "include 'pch.h' before including this file for PCH" 9 | #endif 10 | 11 | #include "resource.h" // 主符号 12 | 13 | 14 | // CtestHwBpClientApp: 15 | // 有关此类的实现,请参阅 testHwBpClient.cpp 16 | // 17 | 18 | class CtestHwBpClientApp : public CWinApp 19 | { 20 | public: 21 | CtestHwBpClientApp(); 22 | 23 | // 重写 24 | public: 25 | virtual BOOL InitInstance(); 26 | 27 | // 实现 28 | 29 | DECLARE_MESSAGE_MAP() 30 | }; 31 | 32 | extern CtestHwBpClientApp theApp; 33 | -------------------------------------------------------------------------------- /Client/testHwBpClient.rc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SsageParuders/Android_Kernel_hwBreakPoint/057a92392e17f7c18896084eba4dd2d6a91abfa9/Client/testHwBpClient.rc -------------------------------------------------------------------------------- /Client/testHwBpClient.vcxproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Debug 6 | Win32 7 | 8 | 9 | Release 10 | Win32 11 | 12 | 13 | Debug 14 | x64 15 | 16 | 17 | Release 18 | x64 19 | 20 | 21 | 22 | 15.0 23 | {6439C510-058C-47A7-BF11-1890BFD3A470} 24 | MFCProj 25 | testHwBpClient 26 | 10.0.17763.0 27 | 28 | 29 | 30 | Application 31 | true 32 | v141 33 | Unicode 34 | Static 35 | 36 | 37 | Application 38 | false 39 | v141 40 | true 41 | Unicode 42 | Static 43 | 44 | 45 | Application 46 | true 47 | v141 48 | Unicode 49 | Static 50 | 51 | 52 | Application 53 | false 54 | v141 55 | true 56 | Unicode 57 | Static 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | true 79 | 80 | 81 | true 82 | 83 | 84 | false 85 | 86 | 87 | false 88 | 89 | 90 | 91 | Use 92 | Level3 93 | Disabled 94 | false 95 | _WINDOWS;_DEBUG;%(PreprocessorDefinitions) 96 | pch.h 97 | 98 | 99 | Windows 100 | 101 | 102 | false 103 | true 104 | _DEBUG;%(PreprocessorDefinitions) 105 | 106 | 107 | 0x0804 108 | _DEBUG;%(PreprocessorDefinitions) 109 | $(IntDir);%(AdditionalIncludeDirectories) 110 | 111 | 112 | 113 | 114 | Use 115 | Level3 116 | Disabled 117 | true 118 | WIN32;_WINDOWS;_DEBUG;%(PreprocessorDefinitions) 119 | pch.h 120 | 121 | 122 | Windows 123 | 124 | 125 | false 126 | true 127 | _DEBUG;%(PreprocessorDefinitions) 128 | 129 | 130 | 0x0804 131 | _DEBUG;%(PreprocessorDefinitions) 132 | $(IntDir);%(AdditionalIncludeDirectories) 133 | 134 | 135 | 136 | 137 | Use 138 | Level3 139 | MaxSpeed 140 | true 141 | true 142 | true 143 | WIN32;_WINDOWS;NDEBUG;%(PreprocessorDefinitions) 144 | pch.h 145 | 146 | 147 | Windows 148 | true 149 | true 150 | 151 | 152 | false 153 | true 154 | NDEBUG;%(PreprocessorDefinitions) 155 | 156 | 157 | 0x0804 158 | NDEBUG;%(PreprocessorDefinitions) 159 | $(IntDir);%(AdditionalIncludeDirectories) 160 | 161 | 162 | 163 | 164 | Use 165 | Level3 166 | MaxSpeed 167 | true 168 | true 169 | false 170 | _WINDOWS;NDEBUG;%(PreprocessorDefinitions) 171 | pch.h 172 | 173 | 174 | Windows 175 | true 176 | true 177 | 178 | 179 | false 180 | true 181 | NDEBUG;%(PreprocessorDefinitions) 182 | 183 | 184 | 0x0804 185 | NDEBUG;%(PreprocessorDefinitions) 186 | $(IntDir);%(AdditionalIncludeDirectories) 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | Create 207 | Create 208 | Create 209 | Create 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | -------------------------------------------------------------------------------- /Client/testHwBpClient.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hh;hpp;hxx;hm;inl;inc;ipp;xsd 11 | 12 | 13 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} 14 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms 15 | 16 | 17 | 18 | 19 | 头文件 20 | 21 | 22 | 头文件 23 | 24 | 25 | 头文件 26 | 27 | 28 | 头文件 29 | 30 | 31 | 头文件 32 | 33 | 34 | 头文件 35 | 36 | 37 | 头文件 38 | 39 | 40 | 头文件 41 | 42 | 43 | 头文件 44 | 45 | 46 | 头文件 47 | 48 | 49 | 50 | 51 | 源文件 52 | 53 | 54 | 源文件 55 | 56 | 57 | 源文件 58 | 59 | 60 | 源文件 61 | 62 | 63 | 源文件 64 | 65 | 66 | 源文件 67 | 68 | 69 | 源文件 70 | 71 | 72 | 73 | 74 | 资源文件 75 | 76 | 77 | 78 | 79 | 资源文件 80 | 81 | 82 | 83 | 84 | 资源文件 85 | 86 | 87 | -------------------------------------------------------------------------------- /Client/testHwBpClient.vcxproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | testHwBpClient.rc 5 | 6 | -------------------------------------------------------------------------------- /Client/testHwBpClientDlg.h: -------------------------------------------------------------------------------- 1 |  2 | // testHwBpClientDlg.h: 头文件 3 | // 4 | 5 | #pragma once 6 | #include "Global.h" 7 | 8 | // CtestHwBpClientDlg 对话框 9 | class CtestHwBpClientDlg : public CDialogEx { 10 | // 构造 11 | public: 12 | CtestHwBpClientDlg(CWnd* pParent = nullptr); // 标准构造函数 13 | 14 | // 对话框数据 15 | #ifdef AFX_DESIGN_TIME 16 | enum { IDD = IDD_TESTHWBPCLIENT_DIALOG }; 17 | #endif 18 | 19 | protected: 20 | virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 21 | 22 | 23 | // 实现 24 | protected: 25 | HICON m_hIcon; 26 | 27 | // 生成的消息映射函数 28 | virtual BOOL OnInitDialog(); 29 | afx_msg void OnSysCommand(UINT nID, LPARAM lParam); 30 | afx_msg void OnPaint(); 31 | afx_msg HCURSOR OnQueryDragIcon(); 32 | afx_msg void OnBnClickedButtonAddHwbp(); 33 | afx_msg void OnDblclkListResult(NMHDR *pNMHDR, LRESULT *pResult); 34 | afx_msg void OnRclickListResult(NMHDR *pNMHDR, LRESULT *pResult); 35 | afx_msg void OnMenuitemCleanList(); 36 | afx_msg void OnMenuitemDeleteSelectedCount(); 37 | afx_msg void OnMenuitemDeleteOtherCount(); 38 | afx_msg void OnMenuitemDeleteUpCount(); 39 | afx_msg void OnMenuitemDeleteDownCount(); 40 | DECLARE_MESSAGE_MAP() 41 | private: 42 | CListCtrl m_list_result; 43 | CString m_edit_pid; 44 | CString m_edit_addr; 45 | CString m_edit_keep_time; 46 | BOOL m_checkbox_pid_hex; 47 | BOOL m_checkbox_addr_hex; 48 | int m_radio_type_r; 49 | int m_radio_len_4; 50 | int m_radio_region_all_thread; 51 | 52 | BOOL m_checkbox_x0; 53 | BOOL m_checkbox_x1; 54 | BOOL m_checkbox_x2; 55 | BOOL m_checkbox_x3; 56 | BOOL m_checkbox_x4; 57 | BOOL m_checkbox_x5; 58 | BOOL m_checkbox_x6; 59 | BOOL m_checkbox_x7; 60 | BOOL m_checkbox_x8; 61 | BOOL m_checkbox_x9; 62 | BOOL m_checkbox_x10; 63 | BOOL m_checkbox_x11; 64 | BOOL m_checkbox_x12; 65 | BOOL m_checkbox_x13; 66 | BOOL m_checkbox_x14; 67 | BOOL m_checkbox_x15; 68 | BOOL m_checkbox_x16; 69 | BOOL m_checkbox_x17; 70 | BOOL m_checkbox_x18; 71 | BOOL m_checkbox_x19; 72 | BOOL m_checkbox_x20; 73 | BOOL m_checkbox_x21; 74 | BOOL m_checkbox_x22; 75 | BOOL m_checkbox_x23; 76 | BOOL m_checkbox_x24; 77 | BOOL m_checkbox_x25; 78 | BOOL m_checkbox_x26; 79 | BOOL m_checkbox_x27; 80 | BOOL m_checkbox_x28; 81 | BOOL m_checkbox_x29; 82 | BOOL m_checkbox_x30; 83 | BOOL m_checkbox_sp; 84 | BOOL m_checkbox_pc; 85 | BOOL m_checkbox_pstate; 86 | BOOL m_checkbox_orig_x0; 87 | BOOL m_checkbox_syscallno; 88 | 89 | CString m_edit_x0; 90 | CString m_edit_x1; 91 | CString m_edit_x2; 92 | CString m_edit_x3; 93 | CString m_edit_x4; 94 | CString m_edit_x5; 95 | CString m_edit_x6; 96 | CString m_edit_x7; 97 | CString m_edit_x8; 98 | CString m_edit_x9; 99 | CString m_edit_x10; 100 | CString m_edit_x11; 101 | CString m_edit_x12; 102 | CString m_edit_x13; 103 | CString m_edit_x14; 104 | CString m_edit_x15; 105 | CString m_edit_x16; 106 | CString m_edit_x17; 107 | CString m_edit_x18; 108 | CString m_edit_x19; 109 | CString m_edit_x20; 110 | CString m_edit_x21; 111 | CString m_edit_x22; 112 | CString m_edit_x23; 113 | CString m_edit_x24; 114 | CString m_edit_x25; 115 | CString m_edit_x26; 116 | CString m_edit_x27; 117 | CString m_edit_x28; 118 | CString m_edit_x29; 119 | CString m_edit_x30; 120 | CString m_edit_sp; 121 | CString m_edit_pc; 122 | CString m_edit_pstate; 123 | CString m_edit_orig_x0; 124 | CString m_edit_syscallno; 125 | private: 126 | void GetUserHitConditions(HIT_CONDITIONS & hitConditions); 127 | }; 128 | -------------------------------------------------------------------------------- /ExecTool/Android.mk: -------------------------------------------------------------------------------- 1 | LOCAL_PATH := $(call my-dir) # 定义 local path 只需一次即可 2 | 3 | ################################################# 4 | 5 | ### 以下内容用于描述编译当前工程的源代码 ### 6 | 7 | include $(CLEAR_VARS) # 声明 CLEAR_VARS 变量 8 | 9 | LOCAL_MODULE := Kernel_hwBP_Exec # 设定模块名称 10 | 11 | LOCAL_CPPFLAGS += -std=c++1y 12 | LOCAL_CFLAGS += -fPIE 13 | LOCAL_CFLAGS += -fvisibility=hidden 14 | LOCAL_LDFLAGS += -fPIE -pie 15 | LOCAL_DISABLE_FATAL_LINKER_WARNINGS := true 16 | 17 | LOCAL_C_INCLUDES += $(LOCAL_PATH)/include # 添加头文件库路径 18 | 19 | # 列举源文件 20 | FILE_LIST := $(wildcard $(LOCAL_PATH)/src/*.c*) 21 | LOCAL_SRC_FILES := $(FILE_LIST:$(LOCAL_PATH)/%=%) 22 | 23 | LOCAL_LDLIBS := -llog -lz # 链接系统库 24 | 25 | include $(BUILD_EXECUTABLE) 26 | 27 | ### 当前工程的源代码编译完毕 ### 28 | 29 | ################################################# -------------------------------------------------------------------------------- /ExecTool/Application.mk: -------------------------------------------------------------------------------- 1 | APP_ABI := arm64-v8a 2 | APP_PLATFORM := android-21 3 | APP_STL := c++_static -------------------------------------------------------------------------------- /ExecTool/build.sh: -------------------------------------------------------------------------------- 1 | ndk-build -B \ 2 | -C outputs \ 3 | NDK_PROJECT_PATH=. \ 4 | NDK_APPLICATION_MK=../Application.mk \ 5 | APP_BUILD_SCRIPT=../Android.mk -------------------------------------------------------------------------------- /ExecTool/clean.sh: -------------------------------------------------------------------------------- 1 | ndk-build clean \ 2 | -C outputs \ 3 | NDK_PROJECT_PATH=. \ 4 | NDK_APPLICATION_MK=../Application.mk \ 5 | APP_BUILD_SCRIPT=../Android.mk -------------------------------------------------------------------------------- /ExecTool/include/HwBreakpointManager.h: -------------------------------------------------------------------------------- 1 | #ifndef HW_BREAKPOINT_MANAGER_H_ 2 | #define HW_BREAKPOINT_MANAGER_H_ 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | 13 | #include 14 | #include "cvector.h" 15 | 16 | //当前驱动版本号 17 | #define SYS_VERSION 01 18 | #define DEV_FILENAME "/dev/hwBreakpointProc" 19 | 20 | 21 | #ifndef __cplusplus 22 | #define true 1 23 | #define false 0 24 | typedef int bool; 25 | #endif 26 | 27 | typedef int BOOL; 28 | #define TRUE 1 29 | #define FALSE 0 30 | 31 | enum { 32 | HW_BREAKPOINT_LEN_1 = 1, 33 | HW_BREAKPOINT_LEN_2 = 2, 34 | HW_BREAKPOINT_LEN_4 = 4, 35 | HW_BREAKPOINT_LEN_8 = 8, 36 | }; 37 | 38 | enum { 39 | HW_BREAKPOINT_EMPTY = 0, 40 | HW_BREAKPOINT_R = 1, 41 | HW_BREAKPOINT_W = 2, 42 | HW_BREAKPOINT_RW = HW_BREAKPOINT_R | HW_BREAKPOINT_W, 43 | HW_BREAKPOINT_X = 4, 44 | HW_BREAKPOINT_INVALID = HW_BREAKPOINT_RW | HW_BREAKPOINT_X, 45 | }; 46 | #pragma pack(1) 47 | struct my_user_pt_regs { 48 | uint64_t regs[31]; 49 | uint64_t sp; 50 | uint64_t pc; 51 | uint64_t pstate; 52 | uint64_t orig_x0; 53 | uint64_t syscallno; 54 | }; 55 | 56 | struct USER_HIT_INFO { 57 | size_t hit_addr; //命中地址 58 | size_t hit_count; //命中次数 59 | struct my_user_pt_regs regs; //最后一次命中的寄存器数据 60 | }; 61 | struct HIT_CONDITIONS { 62 | char enable_regs[31]; 63 | char enable_sp; 64 | char enable_pc; 65 | char enable_pstate; 66 | char enable_orig_x0; 67 | char enable_syscallno; 68 | struct my_user_pt_regs regs; 69 | }; 70 | #pragma pack() 71 | 72 | #define MAJOR_NUM 100 73 | #define IOCTL_OPEN_PROCESS _IOR(MAJOR_NUM, 1, char*) //打开进程 74 | #define IOCTL_CLOSE_HANDLE _IOR(MAJOR_NUM, 2, char*) //关闭进程 75 | #define IOCTL_GET_NUM_BRPS _IOR(MAJOR_NUM, 3, char*) //获取CPU支持硬件执行断点的数量 76 | #define IOCTL_GET_NUM_WRPS _IOR(MAJOR_NUM, 4, char*) //获取CPU支持硬件访问断点的数量 77 | #define IOCTL_SET_HWBP_HIT_CONDITIONS _IOR(MAJOR_NUM, 5, char*) //设置硬件断点命中记录条件 78 | #define IOCTL_ADD_PROCESS_HWBP _IOR(MAJOR_NUM, 6, char*) //设置进程硬件断点 79 | #define IOCTL_DEL_PROCESS_HWBP _IOR(MAJOR_NUM, 7, char*) //删除进程硬件断点 80 | #define IOCTL_GET_HWBP_HIT_ADDR_COUNT _IOR(MAJOR_NUM, 8, char*) //获取硬件断点命中地址数量 81 | 82 | 83 | //声明 84 | ////////////////////////////////////////////////////////////////////////// 85 | //C语言形式接口: 86 | ///////////////////////////////////////////////////////////////////////// 87 | 88 | //连接驱动,返回值:驱动连接句柄,>=0代表成功 89 | static int hwBreakpointProcDriver_Connect(); 90 | 91 | //断开驱动,返回值:TRUE成功,FALSE失败 92 | static BOOL hwBreakpointProcDriver_Disconnect(int nDriverLink); 93 | 94 | //驱动_打开进程(进程PID),返回值:进程句柄,0为失败 95 | static uint64_t hwBreakpointProcDriver_OpenProcess(int nDriverLink, uint64_t pid); 96 | 97 | //驱动_获取CPU支持硬件执行断点的数量,返回值:TRUE成功,FALSE失败 98 | static int hwBreakpointProcDriver_GetNumBRPS(int nDriverLink); 99 | 100 | //驱动_获取CPU支持硬件访问断点的数量,返回值:TRUE成功,FALSE失败 101 | static int hwBreakpointProcDriver_GetNumWRPS(int nDriverLink); 102 | 103 | //驱动_设置硬件断点命中记录条件,返回值:TRUE成功,FALSE失败 104 | static BOOL hwBreakpointProcDriver_SetHwBpHitConditions( 105 | int nDriverLink, 106 | HIT_CONDITIONS * hitConditions); 107 | 108 | //驱动_新增硬件断点,返回值:TRUE成功,FALSE失败 109 | static uint64_t hwBreakpointProcDriver_AddProcessHwBp( 110 | int nDriverLink, 111 | uint64_t hProcess, 112 | uint64_t lpBaseAddress, 113 | uint64_t hwBreakpointLen, 114 | unsigned int hwBreakpointType 115 | ); 116 | 117 | 118 | //驱动_删除硬件断点,返回值:TRUE成功,FALSE失败 119 | static BOOL hwBreakpointProcDriver_DelProcessHwBp( 120 | int nDriverLink, 121 | uint64_t hHwBreakpointHandle); 122 | 123 | //驱动_读取硬件断点命中记录信息,返回值:TRUE成功,FALSE失败 124 | static BOOL hwBreakpointProcDriver_ReadHwBpInfo( 125 | int nDriverLink, 126 | uint64_t hHwBreakpointHandle, 127 | cvector vOutput 128 | ); 129 | 130 | //驱动_清除硬件断点命中记录信息,返回值:TRUE成功,FALSE失败 131 | static BOOL hwBreakpointProcDriver_CleanHwBpInfo(int nDriverLink); 132 | 133 | //驱动_关闭进程,返回值:TRUE成功,FALSE失败 134 | static BOOL hwBreakpointProcDriver_CloseHandle(int nDriverLink, uint64_t handle); 135 | 136 | ////////////////////////////////////////////////////////////////////////// 137 | //C++语言形式接口: 138 | ///////////////////////////////////////////////////////////////////////// 139 | #ifdef __cplusplus 140 | #include 141 | #include 142 | class CHwBreakpointManager { 143 | public: 144 | 145 | CHwBreakpointManager() { 146 | 147 | } 148 | ~CHwBreakpointManager() { 149 | DisconnectDriver(); 150 | } 151 | 152 | //连接驱动(错误代码),返回值:驱动连接句柄,>=0代表成功 153 | BOOL ConnectDriver(int & err) { 154 | if (m_nDriverLink >= 0) { 155 | return TRUE; 156 | } 157 | m_nDriverLink = hwBreakpointProcDriver_Connect(); 158 | if (m_nDriverLink < 0) { 159 | err = m_nDriverLink; 160 | return FALSE; 161 | } else { 162 | err = 0; 163 | } 164 | return TRUE; 165 | } 166 | 167 | //断开驱动,返回值:TRUE成功,FALSE失败 168 | BOOL DisconnectDriver() { 169 | if (m_nDriverLink >= 0) { 170 | hwBreakpointProcDriver_Disconnect(m_nDriverLink); 171 | m_nDriverLink = -1; 172 | return TRUE; 173 | } 174 | return FALSE; 175 | } 176 | 177 | //驱动是否连接正常,返回值:TRUE已连接,FALSE未连接 178 | BOOL IsDriverConnected() { 179 | return m_nDriverLink >= 0 ? TRUE : FALSE; 180 | } 181 | 182 | //驱动_打开进程(进程PID),返回值:进程句柄,0为失败 183 | uint64_t OpenProcess(uint64_t pid) { 184 | return hwBreakpointProcDriver_OpenProcess(m_nDriverLink, pid); 185 | } 186 | 187 | //驱动_获取CPU支持硬件执行断点的数量,返回值:TRUE成功,FALSE失败 188 | int GetNumBRPS() { 189 | return hwBreakpointProcDriver_GetNumBRPS(m_nDriverLink); 190 | } 191 | //驱动_获取CPU支持硬件访问断点的数量,返回值:TRUE成功,FALSE失败 192 | int GetNumWRPS() { 193 | return hwBreakpointProcDriver_GetNumWRPS(m_nDriverLink); 194 | } 195 | 196 | //驱动_设置硬件断点命中记录条件,返回值:TRUE成功,FALSE失败 197 | BOOL SetHwBpHitConditions(HIT_CONDITIONS & hitConditions) { 198 | return hwBreakpointProcDriver_SetHwBpHitConditions(m_nDriverLink, &hitConditions); 199 | } 200 | 201 | //驱动_新增硬件断点,返回值:TRUE成功,FALSE失败 202 | uint64_t AddProcessHwBp( 203 | uint64_t hProcess, 204 | uint64_t lpBaseAddress, 205 | uint64_t hwBreakpointLen, 206 | unsigned int hwBreakpointType 207 | ) { 208 | return hwBreakpointProcDriver_AddProcessHwBp(m_nDriverLink, hProcess, lpBaseAddress, hwBreakpointLen, hwBreakpointType); 209 | } 210 | 211 | 212 | //驱动_删除硬件断点,返回值:TRUE成功,FALSE失败 213 | BOOL DelProcessHwBp(uint64_t hHwBreakpointHandle) { 214 | return hwBreakpointProcDriver_DelProcessHwBp(m_nDriverLink, hHwBreakpointHandle); 215 | } 216 | 217 | //驱动_读取硬件断点命中记录信息,返回值:TRUE成功,FALSE失败 218 | BOOL ReadHwBpInfo(uint64_t hHwBreakpointHandle, std::vector & vOutput) { 219 | cvector cvOutput = cvector_create(sizeof(USER_HIT_INFO)); 220 | BOOL b = hwBreakpointProcDriver_ReadHwBpInfo(m_nDriverLink, hHwBreakpointHandle, cvOutput); 221 | for (citerator iter = cvector_begin(cvOutput); iter != cvector_end(cvOutput); iter = cvector_next(cvOutput, iter)) { 222 | USER_HIT_INFO *rinfo = (USER_HIT_INFO*)iter; 223 | vOutput.push_back(*rinfo); 224 | } 225 | cvector_destroy(cvOutput); 226 | return b; 227 | } 228 | 229 | 230 | 231 | //驱动_清除硬件断点命中记录信息,返回值:TRUE成功,FALSE失败 232 | BOOL CleanHwBpInfo() { 233 | return hwBreakpointProcDriver_CleanHwBpInfo(m_nDriverLink); 234 | } 235 | 236 | 237 | //驱动_关闭进程,返回值:TRUE成功,FALSE失败 238 | BOOL CloseHandle(uint64_t handle) { 239 | return hwBreakpointProcDriver_CloseHandle(m_nDriverLink, handle); 240 | } 241 | private: 242 | int m_nDriverLink = -1; 243 | }; 244 | #endif 245 | 246 | //实现 247 | ////////////////////////////////////////////////////////////////////////// 248 | 249 | 250 | static int hwBreakpointProcDriver_Connect() { 251 | int nDriverLink = open(DEV_FILENAME, O_RDWR); 252 | if (nDriverLink < 0) { 253 | printf("open error():%s\n", strerror(errno)); 254 | } 255 | return nDriverLink; 256 | } 257 | 258 | static BOOL hwBreakpointProcDriver_Disconnect(int nDriverLink) { 259 | if (nDriverLink < 0) { 260 | return FALSE; 261 | } 262 | //�Ͽ��������� 263 | close(nDriverLink); 264 | return TRUE; 265 | } 266 | static uint64_t hwBreakpointProcDriver_OpenProcess(int nDriverLink, uint64_t pid) { 267 | if (nDriverLink < 0) { 268 | return 0; 269 | } 270 | char buf[8] = { 0 }; 271 | memcpy(buf, &pid, 8); 272 | 273 | int res = ioctl(nDriverLink, IOCTL_OPEN_PROCESS, &buf); 274 | if (res != 0) { 275 | printf("OpenProcess ioctl():%s\n", strerror(errno)); 276 | return 0; 277 | } 278 | uint64_t ptr = 0; 279 | memcpy(&ptr, &buf, 8); 280 | return ptr; 281 | } 282 | 283 | 284 | static int hwBreakpointProcDriver_GetNumBRPS(int nDriverLink) { 285 | if (nDriverLink < 0) { 286 | return 0; 287 | } 288 | int res = ioctl(nDriverLink, IOCTL_GET_NUM_BRPS, 0); 289 | return res; 290 | } 291 | static int hwBreakpointProcDriver_GetNumWRPS(int nDriverLink) { 292 | if (nDriverLink < 0) { 293 | return 0; 294 | } 295 | int res = ioctl(nDriverLink, IOCTL_GET_NUM_WRPS, 0); 296 | return res; 297 | } 298 | 299 | static BOOL hwBreakpointProcDriver_SetHwBpHitConditions( 300 | int nDriverLink, 301 | HIT_CONDITIONS * hitConditions) { 302 | if (nDriverLink < 0) { 303 | return FALSE; 304 | } 305 | int res = ioctl(nDriverLink, IOCTL_SET_HWBP_HIT_CONDITIONS, hitConditions); 306 | if (res != 0) { 307 | printf("SetHwBpHitConditions ioctl():%s\n", strerror(errno)); 308 | return FALSE; 309 | } 310 | return TRUE; 311 | } 312 | static uint64_t hwBreakpointProcDriver_AddProcessHwBp( 313 | int nDriverLink, 314 | uint64_t hProcess, 315 | uint64_t lpBaseAddress, 316 | uint64_t hwBreakpointLen, 317 | unsigned int hwBreakpointType 318 | ) { 319 | if (nDriverLink < 0) { 320 | return 0; 321 | } 322 | 323 | 324 | unsigned char buf[28] = { 0 }; 325 | memcpy(buf, &hProcess, 28); 326 | memcpy((void*)((size_t)buf + (size_t)8), &lpBaseAddress, 8); 327 | memcpy((void*)((size_t)buf + (size_t)16), &hwBreakpointLen, 8); 328 | memcpy((void*)((size_t)buf + (size_t)24), &hwBreakpointType, 4); 329 | 330 | int res = ioctl(nDriverLink, IOCTL_ADD_PROCESS_HWBP, &buf); 331 | if (res != 0) { 332 | printf("AddProcessHwBp ioctl():%s\n", strerror(errno)); 333 | return 0; 334 | } 335 | uint64_t ptr = 0; 336 | memcpy(&ptr, &buf, 8); 337 | return ptr; 338 | } 339 | 340 | 341 | static BOOL hwBreakpointProcDriver_DelProcessHwBp( 342 | int nDriverLink, 343 | uint64_t hHwBreakpointHandle) { 344 | if (nDriverLink < 0) { 345 | return FALSE; 346 | } 347 | if (!hHwBreakpointHandle) { 348 | return FALSE; 349 | } 350 | 351 | char buf[8] = { 0 }; 352 | memcpy(buf, &hHwBreakpointHandle, 8); 353 | 354 | int res = ioctl(nDriverLink, IOCTL_DEL_PROCESS_HWBP, &buf); 355 | if (res != 0) { 356 | printf("DelProcessHwBp ioctl():%s\n", strerror(errno)); 357 | return FALSE; 358 | } 359 | return TRUE; 360 | } 361 | 362 | 363 | 364 | static BOOL hwBreakpointProcDriver_ReadHwBpInfo( 365 | int nDriverLink, 366 | uint64_t hHwBreakpointHandle, 367 | cvector vOutput 368 | ) { 369 | if (nDriverLink < 0) { 370 | return FALSE; 371 | } 372 | if (!hHwBreakpointHandle) { 373 | return FALSE; 374 | } 375 | 376 | 377 | char buf[8] = { 0 }; 378 | memcpy(buf, &hHwBreakpointHandle, 8); 379 | int count = ioctl(nDriverLink, IOCTL_GET_HWBP_HIT_ADDR_COUNT, &buf); 380 | //printf("count %d\n", count); 381 | if (count <= 0) { 382 | //printf("ioctl():%s\n", strerror(errno)); 383 | return FALSE; 384 | } 385 | 386 | uint64_t big_buf_len = sizeof(struct USER_HIT_INFO) * count; 387 | char * big_buf = (char*)malloc(big_buf_len); 388 | memset(big_buf, 0, big_buf_len); 389 | memcpy(big_buf, &hHwBreakpointHandle, 8); 390 | 391 | int res = read(nDriverLink, big_buf, big_buf_len); 392 | //printf("res %d\n", res); 393 | if (res <= 0) { 394 | free(big_buf); 395 | return FALSE; 396 | } 397 | size_t copy_pos = (size_t)big_buf; 398 | 399 | for (; res > 0; res--) { 400 | struct USER_HIT_INFO hInfo = { 0 }; 401 | memcpy(&hInfo, (void*)copy_pos, sizeof(hInfo)); 402 | copy_pos += sizeof(hInfo); 403 | cvector_pushback(vOutput, &hInfo); 404 | } 405 | free(big_buf); 406 | return TRUE; 407 | } 408 | 409 | 410 | 411 | static BOOL hwBreakpointProcDriver_CleanHwBpInfo(int nDriverLink) { 412 | if (nDriverLink < 0) { 413 | return FALSE; 414 | } 415 | int res = write(nDriverLink, (void*)1, 1); 416 | if (res == 0) { 417 | printf("CleanHwBpInfo write():%s\n", strerror(errno)); 418 | return FALSE; 419 | } 420 | return TRUE; 421 | } 422 | 423 | 424 | static BOOL hwBreakpointProcDriver_CloseHandle(int nDriverLink, uint64_t handle) { 425 | if (nDriverLink < 0) { 426 | return FALSE; 427 | } 428 | if (!handle) { 429 | return FALSE; 430 | } 431 | 432 | char buf[8] = { 0 }; 433 | memcpy(buf, &handle, 8); 434 | 435 | int res = ioctl(nDriverLink, IOCTL_CLOSE_HANDLE, &buf); 436 | if (res != 0) { 437 | printf("CloseHandle ioctl():%s\n", strerror(errno)); 438 | return FALSE; 439 | } 440 | return TRUE; 441 | } 442 | 443 | 444 | 445 | #endif /* HW_BREAKPOINT_MANAGER_H_ */ 446 | -------------------------------------------------------------------------------- /ExecTool/include/cvector.h: -------------------------------------------------------------------------------- 1 | # ifndef __CVECTOR_H__ 2 | # define __CVECTOR_H__ 3 | 4 | # include 5 | # include 6 | # include 7 | 8 | # define MIN_LEN 256 9 | # define CVEFAILED -1 10 | # define CVESUCCESS 0 11 | # define CVEPUSHBACK 1 12 | # define CVEPOPBACK 2 13 | # define CVEINSERT 3 14 | # define CVERM 4 15 | # define EXPANED_VAL 1 16 | # define REDUSED_VAL 2 17 | 18 | typedef void *citerator; 19 | typedef struct _cvector *cvector; 20 | 21 | # ifdef __cplusplus 22 | extern "C" { 23 | # endif 24 | 25 | cvector cvector_create(const size_t size ); 26 | void cvector_destroy (const cvector cv ); 27 | size_t cvector_length (const cvector cv ); 28 | int cvector_pushback (const cvector cv, void *memb ); 29 | int cvector_popback (const cvector cv, void *memb ); 30 | size_t cvector_iter_at (const cvector cv, citerator iter ); 31 | int cvector_iter_val (const cvector cv, citerator iter, void *memb); 32 | citerator cvector_begin (const cvector cv ); 33 | citerator cvector_end (const cvector cv ); 34 | citerator cvector_next (const cvector cv, citerator iter ); 35 | int cvector_val_at (const cvector cv, size_t index, void *memb ); 36 | int cvector_insert (const cvector cv, citerator iter, void *memb); 37 | int cvector_insert_at(const cvector cv, size_t index, void *memb ); 38 | int cvector_rm (const cvector cv, citerator iter ); 39 | int cvector_rm_at (const cvector cv, size_t index ); 40 | 41 | /* for test */ 42 | void cv_info (const cvector cv ); 43 | void cv_print (const cvector cv ); 44 | 45 | # ifdef __cplusplus 46 | } 47 | # endif 48 | 49 | #endif /* EOF file cvector.h */ 50 | 51 | 52 | 53 | // #include "cvector.h" 54 | // 55 | // int main() 56 | // { 57 | // int i = 1; 58 | // cvector cv = cvector_create(sizeof(int)); 59 | // cvector_pushback(cv, &i); 60 | // cvector_pushback(cv, &i); 61 | // cvector_pushback(cv, &i); 62 | // cvector_pushback(cv, &i); 63 | // cv_print(cv); 64 | // cvector_destroy(cv); 65 | // return 0; 66 | // } -------------------------------------------------------------------------------- /ExecTool/outputs/libs/arm64-v8a/Kernel_hwBP_Exec: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SsageParuders/Android_Kernel_hwBreakPoint/057a92392e17f7c18896084eba4dd2d6a91abfa9/ExecTool/outputs/libs/arm64-v8a/Kernel_hwBP_Exec -------------------------------------------------------------------------------- /ExecTool/outputs/obj/local/arm64-v8a/Kernel_hwBP_Exec: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SsageParuders/Android_Kernel_hwBreakPoint/057a92392e17f7c18896084eba4dd2d6a91abfa9/ExecTool/outputs/obj/local/arm64-v8a/Kernel_hwBP_Exec -------------------------------------------------------------------------------- /ExecTool/outputs/obj/local/arm64-v8a/Kernel_hwBP_exec: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SsageParuders/Android_Kernel_hwBreakPoint/057a92392e17f7c18896084eba4dd2d6a91abfa9/ExecTool/outputs/obj/local/arm64-v8a/Kernel_hwBP_exec -------------------------------------------------------------------------------- /ExecTool/outputs/obj/local/arm64-v8a/objs/Kernel_hwBP_Exec/src/cvector.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SsageParuders/Android_Kernel_hwBreakPoint/057a92392e17f7c18896084eba4dd2d6a91abfa9/ExecTool/outputs/obj/local/arm64-v8a/objs/Kernel_hwBP_Exec/src/cvector.o -------------------------------------------------------------------------------- /ExecTool/outputs/obj/local/arm64-v8a/objs/Kernel_hwBP_Exec/src/cvector.o.d: -------------------------------------------------------------------------------- 1 | ./obj/local/arm64-v8a/objs/Kernel_hwBP_Exec/src/cvector.o: \ 2 | ../src/cvector.c ../include/cvector.h \ 3 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdio.h \ 4 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__config \ 5 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdlib.h \ 6 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/string.h 7 | 8 | ../include/cvector.h: 9 | 10 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdio.h: 11 | 12 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__config: 13 | 14 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdlib.h: 15 | 16 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/string.h: 17 | -------------------------------------------------------------------------------- /ExecTool/outputs/obj/local/arm64-v8a/objs/Kernel_hwBP_Exec/src/main.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SsageParuders/Android_Kernel_hwBreakPoint/057a92392e17f7c18896084eba4dd2d6a91abfa9/ExecTool/outputs/obj/local/arm64-v8a/objs/Kernel_hwBP_Exec/src/main.o -------------------------------------------------------------------------------- /ExecTool/outputs/obj/local/arm64-v8a/objs/Kernel_hwBP_Exec/src/main.o.d: -------------------------------------------------------------------------------- 1 | ./obj/local/arm64-v8a/objs/Kernel_hwBP_Exec/src/main.o: ../src/main.cpp \ 2 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstdio \ 3 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__config \ 4 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdio.h \ 5 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/string.h \ 6 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdlib.h \ 7 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdint.h \ 8 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/memory \ 9 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/type_traits \ 10 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/typeinfo \ 11 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/exception \ 12 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstddef \ 13 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstdlib \ 14 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/version \ 15 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstdint \ 16 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/new \ 17 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/utility \ 18 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__tuple \ 19 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/initializer_list \ 20 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstring \ 21 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__debug \ 22 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/iosfwd \ 23 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/wchar.h \ 24 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/limits \ 25 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/iterator \ 26 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__functional_base \ 27 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/tuple \ 28 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdexcept \ 29 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/atomic \ 30 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__threading_support \ 31 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/chrono \ 32 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/ctime \ 33 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/ratio \ 34 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/climits \ 35 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/limits.h \ 36 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/errno.h \ 37 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/thread \ 38 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/functional \ 39 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/system_error \ 40 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__errc \ 41 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cerrno \ 42 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/string \ 43 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/string_view \ 44 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__string \ 45 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/algorithm \ 46 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/bit \ 47 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cwchar \ 48 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cwctype \ 49 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cctype \ 50 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/ctype.h \ 51 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/wctype.h \ 52 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__mutex_base \ 53 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/sstream \ 54 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/ostream \ 55 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/ios \ 56 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__locale \ 57 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/mutex \ 58 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/locale.h \ 59 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/support/android/locale_bionic.h \ 60 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/streambuf \ 61 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/locale \ 62 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstdarg \ 63 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__bsd_locale_fallbacks.h \ 64 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/bitset \ 65 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__bit_reference \ 66 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/istream \ 67 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cinttypes \ 68 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/inttypes.h \ 69 | ../include/HwBreakpointManager.h ../include/cvector.h \ 70 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/vector \ 71 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__split_buffer 72 | 73 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstdio: 74 | 75 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__config: 76 | 77 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdio.h: 78 | 79 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/string.h: 80 | 81 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdlib.h: 82 | 83 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdint.h: 84 | 85 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/memory: 86 | 87 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/type_traits: 88 | 89 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/typeinfo: 90 | 91 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/exception: 92 | 93 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstddef: 94 | 95 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstdlib: 96 | 97 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/version: 98 | 99 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstdint: 100 | 101 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/new: 102 | 103 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/utility: 104 | 105 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__tuple: 106 | 107 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/initializer_list: 108 | 109 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstring: 110 | 111 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__debug: 112 | 113 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/iosfwd: 114 | 115 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/wchar.h: 116 | 117 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/limits: 118 | 119 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/iterator: 120 | 121 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__functional_base: 122 | 123 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/tuple: 124 | 125 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdexcept: 126 | 127 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/atomic: 128 | 129 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__threading_support: 130 | 131 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/chrono: 132 | 133 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/ctime: 134 | 135 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/ratio: 136 | 137 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/climits: 138 | 139 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/limits.h: 140 | 141 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/errno.h: 142 | 143 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/thread: 144 | 145 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/functional: 146 | 147 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/system_error: 148 | 149 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__errc: 150 | 151 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cerrno: 152 | 153 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/string: 154 | 155 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/string_view: 156 | 157 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__string: 158 | 159 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/algorithm: 160 | 161 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/bit: 162 | 163 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cwchar: 164 | 165 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cwctype: 166 | 167 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cctype: 168 | 169 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/ctype.h: 170 | 171 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/wctype.h: 172 | 173 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__mutex_base: 174 | 175 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/sstream: 176 | 177 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/ostream: 178 | 179 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/ios: 180 | 181 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__locale: 182 | 183 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/mutex: 184 | 185 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/locale.h: 186 | 187 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/support/android/locale_bionic.h: 188 | 189 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/streambuf: 190 | 191 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/locale: 192 | 193 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstdarg: 194 | 195 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__bsd_locale_fallbacks.h: 196 | 197 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/bitset: 198 | 199 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__bit_reference: 200 | 201 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/istream: 202 | 203 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cinttypes: 204 | 205 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/inttypes.h: 206 | 207 | ../include/HwBreakpointManager.h: 208 | 209 | ../include/cvector.h: 210 | 211 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/vector: 212 | 213 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__split_buffer: 214 | -------------------------------------------------------------------------------- /ExecTool/outputs/obj/local/arm64-v8a/objs/Kernel_hwBP_exec/src/cvector.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SsageParuders/Android_Kernel_hwBreakPoint/057a92392e17f7c18896084eba4dd2d6a91abfa9/ExecTool/outputs/obj/local/arm64-v8a/objs/Kernel_hwBP_exec/src/cvector.o -------------------------------------------------------------------------------- /ExecTool/outputs/obj/local/arm64-v8a/objs/Kernel_hwBP_exec/src/cvector.o.d: -------------------------------------------------------------------------------- 1 | ./obj/local/arm64-v8a/objs/Kernel_hwBP_exec/src/cvector.o: \ 2 | ../src/cvector.c ../include/cvector.h \ 3 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdio.h \ 4 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__config \ 5 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdlib.h \ 6 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/string.h 7 | 8 | ../include/cvector.h: 9 | 10 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdio.h: 11 | 12 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__config: 13 | 14 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdlib.h: 15 | 16 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/string.h: 17 | -------------------------------------------------------------------------------- /ExecTool/outputs/obj/local/arm64-v8a/objs/Kernel_hwBP_exec/src/main.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SsageParuders/Android_Kernel_hwBreakPoint/057a92392e17f7c18896084eba4dd2d6a91abfa9/ExecTool/outputs/obj/local/arm64-v8a/objs/Kernel_hwBP_exec/src/main.o -------------------------------------------------------------------------------- /ExecTool/outputs/obj/local/arm64-v8a/objs/Kernel_hwBP_exec/src/main.o.d: -------------------------------------------------------------------------------- 1 | ./obj/local/arm64-v8a/objs/Kernel_hwBP_exec/src/main.o: ../src/main.cpp \ 2 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstdio \ 3 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__config \ 4 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdio.h \ 5 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/string.h \ 6 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdlib.h \ 7 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdint.h \ 8 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/memory \ 9 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/type_traits \ 10 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/typeinfo \ 11 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/exception \ 12 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstddef \ 13 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstdlib \ 14 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/version \ 15 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstdint \ 16 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/new \ 17 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/utility \ 18 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__tuple \ 19 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/initializer_list \ 20 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstring \ 21 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__debug \ 22 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/iosfwd \ 23 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/wchar.h \ 24 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/limits \ 25 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/iterator \ 26 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__functional_base \ 27 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/tuple \ 28 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdexcept \ 29 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/atomic \ 30 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__threading_support \ 31 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/chrono \ 32 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/ctime \ 33 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/ratio \ 34 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/climits \ 35 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/limits.h \ 36 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/errno.h \ 37 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/thread \ 38 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/functional \ 39 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/system_error \ 40 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__errc \ 41 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cerrno \ 42 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/string \ 43 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/string_view \ 44 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__string \ 45 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/algorithm \ 46 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/bit \ 47 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cwchar \ 48 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cwctype \ 49 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cctype \ 50 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/ctype.h \ 51 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/wctype.h \ 52 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__mutex_base \ 53 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/sstream \ 54 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/ostream \ 55 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/ios \ 56 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__locale \ 57 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/mutex \ 58 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/locale.h \ 59 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/support/android/locale_bionic.h \ 60 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/streambuf \ 61 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/locale \ 62 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstdarg \ 63 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__bsd_locale_fallbacks.h \ 64 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/bitset \ 65 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__bit_reference \ 66 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/istream \ 67 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cinttypes \ 68 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/inttypes.h \ 69 | ../include/HwBreakpointManager.h ../include/cvector.h \ 70 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/vector \ 71 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__split_buffer 72 | 73 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstdio: 74 | 75 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__config: 76 | 77 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdio.h: 78 | 79 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/string.h: 80 | 81 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdlib.h: 82 | 83 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdint.h: 84 | 85 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/memory: 86 | 87 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/type_traits: 88 | 89 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/typeinfo: 90 | 91 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/exception: 92 | 93 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstddef: 94 | 95 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstdlib: 96 | 97 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/version: 98 | 99 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstdint: 100 | 101 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/new: 102 | 103 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/utility: 104 | 105 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__tuple: 106 | 107 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/initializer_list: 108 | 109 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstring: 110 | 111 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__debug: 112 | 113 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/iosfwd: 114 | 115 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/wchar.h: 116 | 117 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/limits: 118 | 119 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/iterator: 120 | 121 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__functional_base: 122 | 123 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/tuple: 124 | 125 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdexcept: 126 | 127 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/atomic: 128 | 129 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__threading_support: 130 | 131 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/chrono: 132 | 133 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/ctime: 134 | 135 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/ratio: 136 | 137 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/climits: 138 | 139 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/limits.h: 140 | 141 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/errno.h: 142 | 143 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/thread: 144 | 145 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/functional: 146 | 147 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/system_error: 148 | 149 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__errc: 150 | 151 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cerrno: 152 | 153 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/string: 154 | 155 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/string_view: 156 | 157 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__string: 158 | 159 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/algorithm: 160 | 161 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/bit: 162 | 163 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cwchar: 164 | 165 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cwctype: 166 | 167 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cctype: 168 | 169 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/ctype.h: 170 | 171 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/wctype.h: 172 | 173 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__mutex_base: 174 | 175 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/sstream: 176 | 177 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/ostream: 178 | 179 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/ios: 180 | 181 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__locale: 182 | 183 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/mutex: 184 | 185 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/locale.h: 186 | 187 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/support/android/locale_bionic.h: 188 | 189 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/streambuf: 190 | 191 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/locale: 192 | 193 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstdarg: 194 | 195 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__bsd_locale_fallbacks.h: 196 | 197 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/bitset: 198 | 199 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__bit_reference: 200 | 201 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/istream: 202 | 203 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cinttypes: 204 | 205 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/inttypes.h: 206 | 207 | ../include/HwBreakpointManager.h: 208 | 209 | ../include/cvector.h: 210 | 211 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/vector: 212 | 213 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__split_buffer: 214 | -------------------------------------------------------------------------------- /ExecTool/src/cvector.c: -------------------------------------------------------------------------------- 1 | #include "cvector.h" 2 | 3 | #ifndef __gnu_linux__ 4 | //#define __func__ "unknown" 5 | //#define inline __forceinline 6 | #endif 7 | 8 | # define CWARNING_ITER(cv, iter, file, func, line) \ 9 | do {\ 10 | if ((cvector_begin(cv) > iter) || (cvector_end(cv) <= iter)) {\ 11 | fprintf(stderr, "var(" #iter ") warng out of range, "\ 12 | "at file:%s func:%s line:%d!!\n", file, func, line);\ 13 | return CVEFAILED;\ 14 | }\ 15 | } while (0) 16 | 17 | 18 | struct _cvector 19 | { 20 | void *cv_pdata; 21 | size_t cv_len, cv_tot_len, cv_size; 22 | }; 23 | 24 | 25 | cvector cvector_create(const size_t size) 26 | { 27 | cvector cv = (cvector)malloc(sizeof (struct _cvector)); 28 | 29 | if (!cv) return NULL; 30 | 31 | cv->cv_pdata = malloc(MIN_LEN * size); 32 | 33 | if (!cv->cv_pdata) 34 | { 35 | free(cv); 36 | return NULL; 37 | } 38 | 39 | cv->cv_size = size; 40 | cv->cv_tot_len = MIN_LEN; 41 | cv->cv_len = 0; 42 | 43 | return cv; 44 | } 45 | 46 | void cvector_destroy(const cvector cv) 47 | { 48 | free(cv->cv_pdata); 49 | free(cv); 50 | return; 51 | } 52 | 53 | size_t cvector_length(const cvector cv) 54 | { 55 | return cv->cv_len; 56 | } 57 | 58 | int cvector_pushback(const cvector cv, void *memb) 59 | { 60 | if (cv->cv_len >= cv->cv_tot_len) 61 | { 62 | void *pd_sav = cv->cv_pdata; 63 | cv->cv_tot_len <<= EXPANED_VAL; 64 | cv->cv_pdata = realloc(cv->cv_pdata, cv->cv_tot_len * cv->cv_size); 65 | 66 | if (!cv->cv_pdata) 67 | { 68 | cv->cv_pdata = pd_sav; 69 | cv->cv_tot_len >>= EXPANED_VAL; 70 | return CVEPUSHBACK; 71 | } 72 | } 73 | 74 | memcpy((char *)cv->cv_pdata + cv->cv_len * cv->cv_size, memb, cv->cv_size); 75 | cv->cv_len++; 76 | 77 | return CVESUCCESS; 78 | } 79 | 80 | int cvector_popback(const cvector cv, void *memb) 81 | { 82 | if (cv->cv_len <= 0) return CVEPOPBACK; 83 | 84 | cv->cv_len--; 85 | memcpy(memb, (char *)cv->cv_pdata + cv->cv_len * cv->cv_size, cv->cv_size); 86 | 87 | if ((cv->cv_tot_len >= (MIN_LEN << REDUSED_VAL)) 88 | && (cv->cv_len <= (cv->cv_tot_len >> REDUSED_VAL))) 89 | { 90 | void *pd_sav = cv->cv_pdata; 91 | cv->cv_tot_len >>= EXPANED_VAL; 92 | cv->cv_pdata = realloc(cv->cv_pdata, cv->cv_tot_len * cv->cv_size); 93 | 94 | if (!cv->cv_pdata) 95 | { 96 | cv->cv_tot_len <<= EXPANED_VAL; 97 | cv->cv_pdata = pd_sav; 98 | return CVEPOPBACK; 99 | } 100 | } 101 | 102 | return CVESUCCESS; 103 | } 104 | 105 | size_t cvector_iter_at(const cvector cv, citerator iter) 106 | { 107 | CWARNING_ITER(cv, iter, __FILE__, __func__, __LINE__); 108 | return ((char *)iter - (char *)cv->cv_pdata) / cv->cv_size; 109 | } 110 | 111 | int cvector_iter_val(const cvector cv, citerator iter, void *memb) 112 | { 113 | CWARNING_ITER(cv, iter, __FILE__, __func__, __LINE__); 114 | memcpy(memb, iter, cv->cv_size); 115 | return 0; 116 | } 117 | 118 | citerator cvector_begin(const cvector cv) 119 | { 120 | return cv->cv_pdata; 121 | } 122 | 123 | citerator cvector_end(const cvector cv) 124 | { 125 | return (char *)cv->cv_pdata + (cv->cv_size * cv->cv_len); 126 | } 127 | 128 | static inline void cvmemove_foreward(const cvector cv, void *from, void *to) 129 | { 130 | size_t size = cv->cv_size; 131 | char *p; 132 | for (p = (char *)to; p >= (char *)from; p -= size) memcpy(p + size, p, size); 133 | return; 134 | } 135 | 136 | static inline void cvmemove_backward(const cvector cv, void *from, void *to) 137 | { 138 | memcpy(from, (char *)from + cv->cv_size, (char *)to - (char *)from); 139 | return; 140 | } 141 | 142 | int cvector_insert(const cvector cv, citerator iter, void *memb) 143 | { 144 | CWARNING_ITER(cv, iter, __FILE__, __func__, __LINE__); 145 | 146 | if (cv->cv_len >= cv->cv_tot_len) 147 | { 148 | void *pd_sav = cv->cv_pdata; 149 | cv->cv_tot_len <<= EXPANED_VAL; 150 | cv->cv_pdata = realloc(cv->cv_pdata, cv->cv_tot_len * cv->cv_size); 151 | 152 | if (!cv->cv_pdata) 153 | { 154 | cv->cv_pdata = pd_sav; 155 | cv->cv_tot_len >>= EXPANED_VAL; 156 | return CVEINSERT; 157 | } 158 | } 159 | 160 | cvmemove_foreward(cv, iter, (char *)cv->cv_pdata + cv->cv_len * cv->cv_size); 161 | memcpy(iter, memb, cv->cv_size); 162 | cv->cv_len++; 163 | 164 | return CVESUCCESS; 165 | } 166 | 167 | int cvector_insert_at(const cvector cv, size_t index, void *memb) 168 | { 169 | citerator iter; 170 | 171 | if (index >= cv->cv_tot_len) 172 | { 173 | cv->cv_len = index + 1; 174 | while (cv->cv_len >= cv->cv_tot_len) cv->cv_tot_len <<= EXPANED_VAL; 175 | cv->cv_pdata = realloc(cv->cv_pdata, cv->cv_tot_len * cv->cv_size); 176 | iter = (char *)cv->cv_pdata + cv->cv_size * index; 177 | memcpy(iter, memb, cv->cv_size); 178 | } 179 | else 180 | { 181 | iter = (char *)cv->cv_pdata + cv->cv_size * index; 182 | cvector_insert(cv, iter, memb); 183 | } 184 | 185 | return 0; 186 | } 187 | 188 | citerator cvector_next(const cvector cv, citerator iter) 189 | { 190 | return (char *)iter + cv->cv_size; 191 | } 192 | 193 | int cvector_val(const cvector cv, citerator iter, void *memb) 194 | { 195 | memcpy(memb, iter, cv->cv_size); 196 | return 0; 197 | } 198 | 199 | int cvector_val_at(const cvector cv, size_t index, void *memb) 200 | { 201 | memcpy(memb, (char *)cv->cv_pdata + index * cv->cv_size, cv->cv_size); 202 | return 0; 203 | } 204 | 205 | int cvector_rm(const cvector cv, citerator iter) 206 | { 207 | citerator from; 208 | citerator end; 209 | CWARNING_ITER(cv, iter, __FILE__, __func__, __LINE__); 210 | from = iter; 211 | end = cvector_end(cv); 212 | memcpy(from, (char *)from + cv->cv_size, (char *)end - (char *)from); 213 | cv->cv_len--; 214 | 215 | if ((cv->cv_tot_len >= (MIN_LEN << REDUSED_VAL)) 216 | && (cv->cv_len <= (cv->cv_tot_len >> REDUSED_VAL))) 217 | { 218 | void *pd_sav = cv->cv_pdata; 219 | cv->cv_tot_len >>= EXPANED_VAL; 220 | cv->cv_pdata = realloc(cv->cv_pdata, cv->cv_tot_len * cv->cv_size); 221 | 222 | if (!cv->cv_pdata) 223 | { 224 | cv->cv_tot_len <<= EXPANED_VAL; 225 | cv->cv_pdata = pd_sav; 226 | return CVERM; 227 | } 228 | } 229 | 230 | return CVESUCCESS; 231 | } 232 | 233 | int cvector_rm_at(const cvector cv, size_t index) 234 | { 235 | citerator iter; 236 | iter = (char *)cv->cv_pdata + cv->cv_size * index; 237 | CWARNING_ITER(cv, iter, __FILE__, __func__, __LINE__); 238 | return cvector_rm(cv, iter); 239 | } 240 | 241 | void cv_info(const cvector cv) 242 | { 243 | printf("\n\ntot :%s : %d\n", __func__, cv->cv_tot_len); 244 | printf("len :%s : %d\n", __func__, cv->cv_len); 245 | printf("size:%s : %d\n\n", __func__, cv->cv_size); 246 | return; 247 | } 248 | 249 | void cv_print(const cvector cv) 250 | { 251 | int num; 252 | citerator iter; 253 | 254 | if (cvector_length(cv) == 0) 255 | fprintf(stderr, "file:%s func:%s line:%d error, null length cvector!!\n", __FILE__, __func__, __LINE__); 256 | 257 | for (iter = cvector_begin(cv); 258 | iter != cvector_end(cv); 259 | iter = cvector_next(cv, iter)) 260 | { 261 | cvector_iter_val(cv, iter, &num); 262 | printf("var:%d at:%d\n", num, cvector_iter_at(cv, iter)); 263 | } 264 | 265 | return; 266 | } 267 | -------------------------------------------------------------------------------- /ExecTool/src/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | 12 | #include 13 | 14 | int g_value = 0; 15 | 16 | BOOL GetProcessTask(int pid, std::vector & vOutput) { 17 | DIR *dir = NULL; 18 | struct dirent *ptr = NULL; 19 | char szTaskPath[256] = { 0 }; 20 | sprintf(szTaskPath, "/proc/%d/task", pid); 21 | 22 | dir = opendir(szTaskPath); 23 | if (NULL != dir) { 24 | while ((ptr = readdir(dir)) != NULL) // 循环读取路径下的每一个文件/文件夹 25 | { 26 | // 如果读取到的是"."或者".."则跳过,读取到的不是文件夹名字也跳过 27 | if ((strcmp(ptr->d_name, ".") == 0) || (strcmp(ptr->d_name, "..") == 0)) { 28 | continue; 29 | } else if (ptr->d_type != DT_DIR) { 30 | continue; 31 | } else if (strspn(ptr->d_name, "1234567890") != strlen(ptr->d_name)) { 32 | continue; 33 | } 34 | 35 | int task = atoi(ptr->d_name); 36 | vOutput.push_back(task); 37 | } 38 | closedir(dir); 39 | return TRUE; 40 | } 41 | return FALSE; 42 | } 43 | 44 | 45 | int main(int argc, char *argv[]) { 46 | int opt; 47 | int argv_pid = 0; 48 | size_t argv_hwbp_addr = 0; 49 | int argv_hwbp_len = 0; 50 | int argv_hwbp_type = 0; 51 | bool is_printf_more = false; 52 | 53 | while ((opt = getopt(argc, argv, "p:a:l:t:d:")) != -1) { 54 | switch (opt) { 55 | case 'p': 56 | argv_pid = atoi(optarg); 57 | break; 58 | case 'a': 59 | argv_hwbp_addr = strtoul(optarg, NULL, 16); 60 | break; 61 | case 'l': 62 | argv_hwbp_len = atoi(optarg); 63 | break; 64 | case 't': 65 | if (strcmp(optarg, "r") == 0) { 66 | argv_hwbp_type = HW_BREAKPOINT_R; 67 | } else if (strcmp(optarg, "w") == 0) { 68 | argv_hwbp_type = HW_BREAKPOINT_W; 69 | } else if (strcmp(optarg, "rw") == 0) { 70 | argv_hwbp_type = HW_BREAKPOINT_R | HW_BREAKPOINT_W; 71 | } else if (strcmp(optarg, "x") == 0) { 72 | argv_hwbp_type = HW_BREAKPOINT_X; 73 | } 74 | break; 75 | case 'd': 76 | if (strcmp(optarg, "T") == 0) { 77 | is_printf_more = true; 78 | } else if (strcmp(optarg, "F") == 0) { 79 | is_printf_more = false; 80 | } 81 | break; 82 | default: 83 | printf("Usage: %s [-p ] [-a ] [-l ] [-t ] [-d ] arg1 ...\n", argv[0]); 84 | printf("Example: %s -p 8072 -a 9ECF6140 -l 8 -t rw -d F\n", argv[0]); 85 | return 0; 86 | break; 87 | } 88 | } 89 | if (argv_pid == 0 || argv_hwbp_addr == 0 || argv_hwbp_len == 0 || argv_hwbp_type == 0) { 90 | printf("Error value.\n"); 91 | return 0; 92 | } 93 | 94 | if(is_printf_more){ // 开启了debug模式才打印 95 | printf( 96 | "======================================================\n" 97 | "本驱动名称: Linux ARM64 硬件断点进程调试驱动\n" 98 | "本驱动接口列表:\n" 99 | "\t1. 驱动_打开进程: OpenProcess\n" 100 | "\t2. 驱动_获取CPU支持硬件执行断点的数量: GetNumBRPS\n" 101 | "\t3. 驱动_获取CPU支持硬件访问断点的数量: GetNumWRPS\n" 102 | "\t4. 驱动_设置进程硬件断点: AddProcessHwBp\n" 103 | "\t5. 驱动_删除进程硬件断点: DelProcessHwBp\n" 104 | "\t6. 驱动_读取硬件断点命中信息: ReadHwBpInfo\n" 105 | "\t7. 驱动_清空硬件断点命中信息: CleanHwBpInfo\n" 106 | "\t8. 驱动_关闭进程: CloseHandle\n" 107 | "\t以上所有功能不注入、不附加进程,不打开进程任何文件,所有操作均为硬件操作\n" 108 | "======================================================\n" 109 | ); 110 | } 111 | 112 | 113 | printf("pid:%d,addr:%p,len:%d,type:%d\n", argv_pid, argv_hwbp_addr, argv_hwbp_len, argv_hwbp_type); 114 | 115 | 116 | CHwBreakpointManager driver; 117 | //连接驱动 118 | int err = 0; 119 | if (!driver.ConnectDriver(err)) { 120 | printf("连接驱动失败\n"); 121 | return 0; 122 | } 123 | 124 | //获取CPU支持硬件执行和访问断点的数量 125 | int bprsCount = driver.GetNumBRPS(); 126 | int wprsCount = driver.GetNumWRPS(); 127 | printf("驱动_获取CPU支持硬件执行断点的数量:%d\n", bprsCount); 128 | printf("驱动_获取CPU支持硬件访问断点的数量:%d\n", wprsCount); 129 | 130 | 131 | 132 | //获取当前进程所有的task 133 | std::vector vTask; 134 | GetProcessTask(argv_pid, vTask); 135 | if (vTask.size() == 0) { 136 | printf("获取目标进程task失败\n"); 137 | return 0; 138 | } 139 | printf("task count:%d\n", vTask.size()); 140 | 141 | //设置进程硬件断点 142 | std::vector vHwBpHandle; 143 | 144 | for (int i = 0; i < vTask.size(); i++) { 145 | //打开task 146 | uint64_t hProcess = driver.OpenProcess(vTask.at(i)); 147 | 148 | if(is_printf_more){ // 开启了debug模式才打印 149 | printf("调用驱动 OpenProcess(%d) 返回值:%" PRIu64 "\n", vTask.at(i), hProcess); 150 | } 151 | if (!hProcess) { 152 | printf("调用驱动 OpenProcess 失败\n"); 153 | fflush(stdout); 154 | continue; 155 | } 156 | 157 | //设置进程硬件断点 158 | uint64_t hwBpHandle = driver.AddProcessHwBp(hProcess, argv_hwbp_addr, 159 | argv_hwbp_len, argv_hwbp_type); 160 | if(is_printf_more){ // 开启了debug模式才打印 161 | printf("调用驱动 AddProcessHwBp(%p) 返回值:%" PRIu64 "\n", &g_value, hwBpHandle); 162 | } 163 | 164 | if (hwBpHandle) { 165 | vHwBpHandle.push_back(hwBpHandle); 166 | } 167 | //关闭task 168 | driver.CloseHandle(hProcess); 169 | 170 | if(is_printf_more){ // 开启了debug模式才打印 171 | printf("调用驱动 CloseHandle:%" PRIu64 "\n", hProcess); 172 | } 173 | 174 | } 175 | sleep(2); 176 | //删除进程硬件断点 177 | for (uint64_t hwBpHandle : vHwBpHandle) { 178 | driver.DelProcessHwBp(hwBpHandle); 179 | if(is_printf_more){ // 开启了debug模式才打印 180 | printf("==========================================================================\n"); 181 | printf("调用驱动 DelProcessHwBp(%" PRIu64 ")\n", hwBpHandle); 182 | } 183 | } 184 | //读取硬件断点命中信息 185 | for (uint64_t hwBpHandle : vHwBpHandle) { 186 | std::vector vHit; 187 | BOOL b = driver.ReadHwBpInfo(hwBpHandle, vHit); 188 | 189 | if(is_printf_more || b == 1){ // 开启了debug模式 或者 b值为1 190 | printf("==========================================================================\n"); 191 | printf("Call ReadProcessHwBp(%" PRIu64 ") 返回值:%d\n", hwBpHandle, b); 192 | } 193 | 194 | for (USER_HIT_INFO userhInfo : vHit) { 195 | printf("==========================================================================\n"); 196 | printf("硬件断点命中地址:%p,命中次数:%zu\n", userhInfo.hit_addr, userhInfo.hit_count); 197 | for (int r = 0; r < 30; r += 5) { 198 | printf("\tX%-2d=%-12llx X%-2d=%-12llx X%-2d=%-12llx X%-2d=%-12llx X%-2d=%-12llx\n", 199 | r, userhInfo.regs.regs[r], 200 | r + 1, userhInfo.regs.regs[r + 1], 201 | r + 2, userhInfo.regs.regs[r + 2], 202 | r + 3, userhInfo.regs.regs[r + 3], 203 | r + 4, userhInfo.regs.regs[r + 4]); 204 | } 205 | printf("\tLR=%-12llx SP=%-12llx PC=%-12llx\n", 206 | userhInfo.regs.regs[30], 207 | userhInfo.regs.sp, 208 | userhInfo.regs.pc); 209 | 210 | printf("\tprocess status:%-12llx orig_x0:%-12llx syscallno:%-12llx\n", 211 | userhInfo.regs.pstate, 212 | userhInfo.regs.orig_x0, 213 | userhInfo.regs.syscallno); 214 | printf("==========================================================================\n"); 215 | } 216 | } 217 | //清空硬件断点命中信息 218 | driver.CleanHwBpInfo(); 219 | printf("Call CleanHwBpInfo()\n"); 220 | return 0; 221 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Reverse-Kindergarten 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | CONFIG_MODULE_SIG=n # 不签名模块 2 | KBUILD_EXTRA_SYMBOLS=/home/ssage/Desktop/MiKernel/Modules/Mi_10_U_Res/Module.symvers # ??symbols?crc 3 | 4 | MODULE_NAME := hwBreakpointProc 5 | RESMAN_CORE_OBJS:=sys.o 6 | RESMAN_GLUE_OBJS:=cvector.o 7 | 8 | ifneq ($(KERNELRELEASE),) 9 | $(MODULE_NAME)-objs:=$(RESMAN_GLUE_OBJS) $(RESMAN_CORE_OBJS) 10 | obj-m := hwBreakpointProc.o 11 | else 12 | KDIR :=/home/ssage/Desktop/MiKernel/cmi-r-oss/out 13 | PWD := $(shell pwd) 14 | ARCH=arm64 15 | all: 16 | make -C $(KDIR) ARCH=$(ARCH) CROSS_COMPILE=/home/ssage/Desktop/ToolChains/aarch64-linux-android-4.9-uber-master/bin/aarch64-linux-android- CC=/home/ssage/Desktop/ToolChains/toolchains/llvm-Snapdragon_LLVM_for_Android_8.0/prebuilt/linux-x86_64/bin/clang CLANG_TRIPLE=aarch64-linux-gnu- M=${PWD} modules 17 | rm -rf .*.o.d *.o *.mod.c .*.cmd .tmp_versions *.order *.symvers 18 | 19 | clean: 20 | rm -rf .*.o.d *.o *.ko *.mod.c .*.cmd .tmp_versions *.order *.symvers 21 | 22 | endif 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | From [rwProcMem33](https://github.com/abcz316/rwProcMem33) 2 | 3 | And Update By SsageParuders 4 | 5 | --- 6 | 7 | ## About Moudle 8 | 9 | 1. Change your `KERNEL_VERSION` on `ver_control` 10 | 11 | 2. Change your `KDIR` && `KBUILD_EXTRA_SYMBOLS` && `CROSS_COMPILE` && `CC` on `Makefile` 12 | 13 | --- 14 | 15 | ## About Server 16 | 17 | 1. Add `ndk-build` to PATH 18 | 19 | 2. Run `build.sh` or `clean.sh` 20 | 21 | --- 22 | 23 | ## About Client 24 | 25 | 1. Download Visual Studio And download MFC dependence , such as:
26 | ![](./res/MFC.png) 27 | 28 | 2. Just build it 29 | 30 | ## About ExecTool 31 | 32 | 1. Add `ndk-build` to PATH 33 | 34 | 2. Run `build.sh` or `clean.sh` 35 | 36 | ## How To Use 37 | 38 | ### C/S 39 | 40 | 1. Start Kernel_hwBP_Server on Android:
41 | ```bash 42 | # adb shell 43 | cd /data/local/tmp && chmod +x Kernel_hwBP_Server && ./Kernel_hwBP_Server 44 | ``` 45 | 46 | 2. Add IP And Port for Client:
47 | ![](./res/Client.png) 48 | 49 | ### ExecTool 50 | 51 | - Use ExecTool
52 | ```bash 53 | Usage: ./Kernel_hwBP_Exec [-p ] [-a ] [-l ] [-t ] [-d ] arg1 ... 54 | Example: ./Kernel_hwBP_Exec -p 8072 -a 9ECF6140 -l 8 -t rw -d F 55 | ``` 56 | 57 | --- -------------------------------------------------------------------------------- /Server/Android.mk: -------------------------------------------------------------------------------- 1 | LOCAL_PATH := $(call my-dir) # 定义 local path 只需一次即可 2 | 3 | ################################################# 4 | 5 | ### 以下内容用于描述编译当前工程的源代码 ### 6 | 7 | include $(CLEAR_VARS) # 声明 CLEAR_VARS 变量 8 | 9 | LOCAL_MODULE := Kernel_hwBP_Server # 设定模块名称 10 | 11 | LOCAL_CPPFLAGS += -std=c++1y 12 | LOCAL_CFLAGS += -fPIE 13 | LOCAL_CFLAGS += -fvisibility=hidden 14 | LOCAL_LDFLAGS += -fPIE -pie 15 | LOCAL_DISABLE_FATAL_LINKER_WARNINGS := true 16 | 17 | LOCAL_C_INCLUDES += $(LOCAL_PATH)/include # 添加头文件库路径 18 | 19 | # 列举源文件 20 | FILE_LIST := $(wildcard $(LOCAL_PATH)/src/*.c*) 21 | LOCAL_SRC_FILES := $(FILE_LIST:$(LOCAL_PATH)/%=%) 22 | 23 | LOCAL_LDLIBS := -llog -lz # 链接系统库 24 | 25 | include $(BUILD_EXECUTABLE) 26 | 27 | ### 当前工程的源代码编译完毕 ### 28 | 29 | ################################################# -------------------------------------------------------------------------------- /Server/Application.mk: -------------------------------------------------------------------------------- 1 | APP_ABI := arm64-v8a 2 | APP_PLATFORM := android-21 3 | APP_STL := c++_static -------------------------------------------------------------------------------- /Server/build.sh: -------------------------------------------------------------------------------- 1 | ndk-build -B \ 2 | -C outputs \ 3 | NDK_PROJECT_PATH=. \ 4 | NDK_APPLICATION_MK=../Application.mk \ 5 | APP_BUILD_SCRIPT=../Android.mk -------------------------------------------------------------------------------- /Server/clean.sh: -------------------------------------------------------------------------------- 1 | ndk-build clean \ 2 | -C outputs \ 3 | NDK_PROJECT_PATH=. \ 4 | NDK_APPLICATION_MK=../Application.mk \ 5 | APP_BUILD_SCRIPT=../Android.mk -------------------------------------------------------------------------------- /Server/include/Global.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include "api.h" 7 | #include "HwBreakpointManager.h" 8 | /* 9 | struct HANDLE_INFO 10 | { 11 | uint64_t p; 12 | handleType type; 13 | 14 | 15 | }; 16 | extern std::map g_HandlePointList; 17 | */ 18 | extern CHwBreakpointManager g_Driver; 19 | 20 | -------------------------------------------------------------------------------- /Server/include/HwBreakpointManager.h: -------------------------------------------------------------------------------- 1 | #ifndef HW_BREAKPOINT_MANAGER_H_ 2 | #define HW_BREAKPOINT_MANAGER_H_ 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | 13 | #include 14 | #include "cvector.h" 15 | 16 | //当前驱动版本号 17 | #define SYS_VERSION 01 18 | #define DEV_FILENAME "/dev/hwBreakpointProc" 19 | 20 | 21 | #ifndef __cplusplus 22 | #define true 1 23 | #define false 0 24 | typedef int bool; 25 | #endif 26 | 27 | typedef int BOOL; 28 | #define TRUE 1 29 | #define FALSE 0 30 | 31 | enum { 32 | HW_BREAKPOINT_LEN_1 = 1, 33 | HW_BREAKPOINT_LEN_2 = 2, 34 | HW_BREAKPOINT_LEN_4 = 4, 35 | HW_BREAKPOINT_LEN_8 = 8, 36 | }; 37 | 38 | enum { 39 | HW_BREAKPOINT_EMPTY = 0, 40 | HW_BREAKPOINT_R = 1, 41 | HW_BREAKPOINT_W = 2, 42 | HW_BREAKPOINT_RW = HW_BREAKPOINT_R | HW_BREAKPOINT_W, 43 | HW_BREAKPOINT_X = 4, 44 | HW_BREAKPOINT_INVALID = HW_BREAKPOINT_RW | HW_BREAKPOINT_X, 45 | }; 46 | #pragma pack(1) 47 | struct my_user_pt_regs { 48 | uint64_t regs[31]; 49 | uint64_t sp; 50 | uint64_t pc; 51 | uint64_t pstate; 52 | uint64_t orig_x0; 53 | uint64_t syscallno; 54 | }; 55 | 56 | struct USER_HIT_INFO { 57 | size_t hit_addr; //命中地址 58 | size_t hit_count; //命中次数 59 | struct my_user_pt_regs regs; //最后一次命中的寄存器数据 60 | }; 61 | struct HIT_CONDITIONS { 62 | char enable_regs[31]; 63 | char enable_sp; 64 | char enable_pc; 65 | char enable_pstate; 66 | char enable_orig_x0; 67 | char enable_syscallno; 68 | struct my_user_pt_regs regs; 69 | }; 70 | #pragma pack() 71 | 72 | #define MAJOR_NUM 100 73 | #define IOCTL_OPEN_PROCESS _IOR(MAJOR_NUM, 1, char*) //打开进程 74 | #define IOCTL_CLOSE_HANDLE _IOR(MAJOR_NUM, 2, char*) //关闭进程 75 | #define IOCTL_GET_NUM_BRPS _IOR(MAJOR_NUM, 3, char*) //获取CPU支持硬件执行断点的数量 76 | #define IOCTL_GET_NUM_WRPS _IOR(MAJOR_NUM, 4, char*) //获取CPU支持硬件访问断点的数量 77 | #define IOCTL_SET_HWBP_HIT_CONDITIONS _IOR(MAJOR_NUM, 5, char*) //设置硬件断点命中记录条件 78 | #define IOCTL_ADD_PROCESS_HWBP _IOR(MAJOR_NUM, 6, char*) //设置进程硬件断点 79 | #define IOCTL_DEL_PROCESS_HWBP _IOR(MAJOR_NUM, 7, char*) //删除进程硬件断点 80 | #define IOCTL_GET_HWBP_HIT_ADDR_COUNT _IOR(MAJOR_NUM, 8, char*) //获取硬件断点命中地址数量 81 | 82 | 83 | //声明 84 | ////////////////////////////////////////////////////////////////////////// 85 | //C语言形式接口: 86 | ///////////////////////////////////////////////////////////////////////// 87 | 88 | //连接驱动,返回值:驱动连接句柄,>=0代表成功 89 | static int hwBreakpointProcDriver_Connect(); 90 | 91 | //断开驱动,返回值:TRUE成功,FALSE失败 92 | static BOOL hwBreakpointProcDriver_Disconnect(int nDriverLink); 93 | 94 | //驱动_打开进程(进程PID),返回值:进程句柄,0为失败 95 | static uint64_t hwBreakpointProcDriver_OpenProcess(int nDriverLink, uint64_t pid); 96 | 97 | //驱动_获取CPU支持硬件执行断点的数量,返回值:TRUE成功,FALSE失败 98 | static int hwBreakpointProcDriver_GetNumBRPS(int nDriverLink); 99 | 100 | //驱动_获取CPU支持硬件访问断点的数量,返回值:TRUE成功,FALSE失败 101 | static int hwBreakpointProcDriver_GetNumWRPS(int nDriverLink); 102 | 103 | //驱动_设置硬件断点命中记录条件,返回值:TRUE成功,FALSE失败 104 | static BOOL hwBreakpointProcDriver_SetHwBpHitConditions( 105 | int nDriverLink, 106 | HIT_CONDITIONS * hitConditions); 107 | 108 | //驱动_新增硬件断点,返回值:TRUE成功,FALSE失败 109 | static uint64_t hwBreakpointProcDriver_AddProcessHwBp( 110 | int nDriverLink, 111 | uint64_t hProcess, 112 | uint64_t lpBaseAddress, 113 | uint64_t hwBreakpointLen, 114 | unsigned int hwBreakpointType 115 | ); 116 | 117 | 118 | //驱动_删除硬件断点,返回值:TRUE成功,FALSE失败 119 | static BOOL hwBreakpointProcDriver_DelProcessHwBp( 120 | int nDriverLink, 121 | uint64_t hHwBreakpointHandle); 122 | 123 | //驱动_读取硬件断点命中记录信息,返回值:TRUE成功,FALSE失败 124 | static BOOL hwBreakpointProcDriver_ReadHwBpInfo( 125 | int nDriverLink, 126 | uint64_t hHwBreakpointHandle, 127 | cvector vOutput 128 | ); 129 | 130 | //驱动_清除硬件断点命中记录信息,返回值:TRUE成功,FALSE失败 131 | static BOOL hwBreakpointProcDriver_CleanHwBpInfo(int nDriverLink); 132 | 133 | //驱动_关闭进程,返回值:TRUE成功,FALSE失败 134 | static BOOL hwBreakpointProcDriver_CloseHandle(int nDriverLink, uint64_t handle); 135 | 136 | ////////////////////////////////////////////////////////////////////////// 137 | //C++语言形式接口: 138 | ///////////////////////////////////////////////////////////////////////// 139 | #ifdef __cplusplus 140 | #include 141 | #include 142 | class CHwBreakpointManager { 143 | public: 144 | 145 | CHwBreakpointManager() { 146 | 147 | } 148 | ~CHwBreakpointManager() { 149 | DisconnectDriver(); 150 | } 151 | 152 | //连接驱动(错误代码),返回值:驱动连接句柄,>=0代表成功 153 | BOOL ConnectDriver(int & err) { 154 | if (m_nDriverLink >= 0) { 155 | return TRUE; 156 | } 157 | m_nDriverLink = hwBreakpointProcDriver_Connect(); 158 | if (m_nDriverLink < 0) { 159 | err = m_nDriverLink; 160 | return FALSE; 161 | } else { 162 | err = 0; 163 | } 164 | return TRUE; 165 | } 166 | 167 | //断开驱动,返回值:TRUE成功,FALSE失败 168 | BOOL DisconnectDriver() { 169 | if (m_nDriverLink >= 0) { 170 | hwBreakpointProcDriver_Disconnect(m_nDriverLink); 171 | m_nDriverLink = -1; 172 | return TRUE; 173 | } 174 | return FALSE; 175 | } 176 | 177 | //驱动是否连接正常,返回值:TRUE已连接,FALSE未连接 178 | BOOL IsDriverConnected() { 179 | return m_nDriverLink >= 0 ? TRUE : FALSE; 180 | } 181 | 182 | //驱动_打开进程(进程PID),返回值:进程句柄,0为失败 183 | uint64_t OpenProcess(uint64_t pid) { 184 | return hwBreakpointProcDriver_OpenProcess(m_nDriverLink, pid); 185 | } 186 | 187 | //驱动_获取CPU支持硬件执行断点的数量,返回值:TRUE成功,FALSE失败 188 | int GetNumBRPS() { 189 | return hwBreakpointProcDriver_GetNumBRPS(m_nDriverLink); 190 | } 191 | //驱动_获取CPU支持硬件访问断点的数量,返回值:TRUE成功,FALSE失败 192 | int GetNumWRPS() { 193 | return hwBreakpointProcDriver_GetNumWRPS(m_nDriverLink); 194 | } 195 | 196 | //驱动_设置硬件断点命中记录条件,返回值:TRUE成功,FALSE失败 197 | BOOL SetHwBpHitConditions(HIT_CONDITIONS & hitConditions) { 198 | return hwBreakpointProcDriver_SetHwBpHitConditions(m_nDriverLink, &hitConditions); 199 | } 200 | 201 | //驱动_新增硬件断点,返回值:TRUE成功,FALSE失败 202 | uint64_t AddProcessHwBp( 203 | uint64_t hProcess, 204 | uint64_t lpBaseAddress, 205 | uint64_t hwBreakpointLen, 206 | unsigned int hwBreakpointType 207 | ) { 208 | return hwBreakpointProcDriver_AddProcessHwBp(m_nDriverLink, hProcess, lpBaseAddress, hwBreakpointLen, hwBreakpointType); 209 | } 210 | 211 | 212 | //驱动_删除硬件断点,返回值:TRUE成功,FALSE失败 213 | BOOL DelProcessHwBp(uint64_t hHwBreakpointHandle) { 214 | return hwBreakpointProcDriver_DelProcessHwBp(m_nDriverLink, hHwBreakpointHandle); 215 | } 216 | 217 | //驱动_读取硬件断点命中记录信息,返回值:TRUE成功,FALSE失败 218 | BOOL ReadHwBpInfo(uint64_t hHwBreakpointHandle, std::vector & vOutput) { 219 | cvector cvOutput = cvector_create(sizeof(USER_HIT_INFO)); 220 | BOOL b = hwBreakpointProcDriver_ReadHwBpInfo(m_nDriverLink, hHwBreakpointHandle, cvOutput); 221 | for (citerator iter = cvector_begin(cvOutput); iter != cvector_end(cvOutput); iter = cvector_next(cvOutput, iter)) { 222 | USER_HIT_INFO *rinfo = (USER_HIT_INFO*)iter; 223 | vOutput.push_back(*rinfo); 224 | } 225 | cvector_destroy(cvOutput); 226 | return b; 227 | } 228 | 229 | 230 | 231 | //驱动_清除硬件断点命中记录信息,返回值:TRUE成功,FALSE失败 232 | BOOL CleanHwBpInfo() { 233 | return hwBreakpointProcDriver_CleanHwBpInfo(m_nDriverLink); 234 | } 235 | 236 | 237 | //驱动_关闭进程,返回值:TRUE成功,FALSE失败 238 | BOOL CloseHandle(uint64_t handle) { 239 | return hwBreakpointProcDriver_CloseHandle(m_nDriverLink, handle); 240 | } 241 | private: 242 | int m_nDriverLink = -1; 243 | }; 244 | #endif 245 | 246 | //实现 247 | ////////////////////////////////////////////////////////////////////////// 248 | 249 | 250 | static int hwBreakpointProcDriver_Connect() { 251 | int nDriverLink = open(DEV_FILENAME, O_RDWR); 252 | if (nDriverLink < 0) { 253 | printf("open error():%s\n", strerror(errno)); 254 | } 255 | return nDriverLink; 256 | } 257 | 258 | static BOOL hwBreakpointProcDriver_Disconnect(int nDriverLink) { 259 | if (nDriverLink < 0) { 260 | return FALSE; 261 | } 262 | //�Ͽ��������� 263 | close(nDriverLink); 264 | return TRUE; 265 | } 266 | static uint64_t hwBreakpointProcDriver_OpenProcess(int nDriverLink, uint64_t pid) { 267 | if (nDriverLink < 0) { 268 | return 0; 269 | } 270 | char buf[8] = { 0 }; 271 | memcpy(buf, &pid, 8); 272 | 273 | int res = ioctl(nDriverLink, IOCTL_OPEN_PROCESS, &buf); 274 | if (res != 0) { 275 | printf("OpenProcess ioctl():%s\n", strerror(errno)); 276 | return 0; 277 | } 278 | uint64_t ptr = 0; 279 | memcpy(&ptr, &buf, 8); 280 | return ptr; 281 | } 282 | 283 | 284 | static int hwBreakpointProcDriver_GetNumBRPS(int nDriverLink) { 285 | if (nDriverLink < 0) { 286 | return 0; 287 | } 288 | int res = ioctl(nDriverLink, IOCTL_GET_NUM_BRPS, 0); 289 | return res; 290 | } 291 | static int hwBreakpointProcDriver_GetNumWRPS(int nDriverLink) { 292 | if (nDriverLink < 0) { 293 | return 0; 294 | } 295 | int res = ioctl(nDriverLink, IOCTL_GET_NUM_WRPS, 0); 296 | return res; 297 | } 298 | 299 | static BOOL hwBreakpointProcDriver_SetHwBpHitConditions( 300 | int nDriverLink, 301 | HIT_CONDITIONS * hitConditions) { 302 | if (nDriverLink < 0) { 303 | return FALSE; 304 | } 305 | int res = ioctl(nDriverLink, IOCTL_SET_HWBP_HIT_CONDITIONS, hitConditions); 306 | if (res != 0) { 307 | printf("SetHwBpHitConditions ioctl():%s\n", strerror(errno)); 308 | return FALSE; 309 | } 310 | return TRUE; 311 | } 312 | static uint64_t hwBreakpointProcDriver_AddProcessHwBp( 313 | int nDriverLink, 314 | uint64_t hProcess, 315 | uint64_t lpBaseAddress, 316 | uint64_t hwBreakpointLen, 317 | unsigned int hwBreakpointType 318 | ) { 319 | if (nDriverLink < 0) { 320 | return 0; 321 | } 322 | 323 | 324 | unsigned char buf[28] = { 0 }; 325 | memcpy(buf, &hProcess, 28); 326 | memcpy((void*)((size_t)buf + (size_t)8), &lpBaseAddress, 8); 327 | memcpy((void*)((size_t)buf + (size_t)16), &hwBreakpointLen, 8); 328 | memcpy((void*)((size_t)buf + (size_t)24), &hwBreakpointType, 4); 329 | 330 | int res = ioctl(nDriverLink, IOCTL_ADD_PROCESS_HWBP, &buf); 331 | if (res != 0) { 332 | printf("AddProcessHwBp ioctl():%s\n", strerror(errno)); 333 | return 0; 334 | } 335 | uint64_t ptr = 0; 336 | memcpy(&ptr, &buf, 8); 337 | return ptr; 338 | } 339 | 340 | 341 | static BOOL hwBreakpointProcDriver_DelProcessHwBp( 342 | int nDriverLink, 343 | uint64_t hHwBreakpointHandle) { 344 | if (nDriverLink < 0) { 345 | return FALSE; 346 | } 347 | if (!hHwBreakpointHandle) { 348 | return FALSE; 349 | } 350 | 351 | char buf[8] = { 0 }; 352 | memcpy(buf, &hHwBreakpointHandle, 8); 353 | 354 | int res = ioctl(nDriverLink, IOCTL_DEL_PROCESS_HWBP, &buf); 355 | if (res != 0) { 356 | printf("DelProcessHwBp ioctl():%s\n", strerror(errno)); 357 | return FALSE; 358 | } 359 | return TRUE; 360 | } 361 | 362 | 363 | 364 | static BOOL hwBreakpointProcDriver_ReadHwBpInfo( 365 | int nDriverLink, 366 | uint64_t hHwBreakpointHandle, 367 | cvector vOutput 368 | ) { 369 | if (nDriverLink < 0) { 370 | return FALSE; 371 | } 372 | if (!hHwBreakpointHandle) { 373 | return FALSE; 374 | } 375 | 376 | 377 | char buf[8] = { 0 }; 378 | memcpy(buf, &hHwBreakpointHandle, 8); 379 | int count = ioctl(nDriverLink, IOCTL_GET_HWBP_HIT_ADDR_COUNT, &buf); 380 | //printf("count %d\n", count); 381 | if (count <= 0) { 382 | //printf("ioctl():%s\n", strerror(errno)); 383 | return FALSE; 384 | } 385 | 386 | uint64_t big_buf_len = sizeof(struct USER_HIT_INFO) * count; 387 | char * big_buf = (char*)malloc(big_buf_len); 388 | memset(big_buf, 0, big_buf_len); 389 | memcpy(big_buf, &hHwBreakpointHandle, 8); 390 | 391 | int res = read(nDriverLink, big_buf, big_buf_len); 392 | //printf("res %d\n", res); 393 | if (res <= 0) { 394 | free(big_buf); 395 | return FALSE; 396 | } 397 | size_t copy_pos = (size_t)big_buf; 398 | 399 | for (; res > 0; res--) { 400 | struct USER_HIT_INFO hInfo = { 0 }; 401 | memcpy(&hInfo, (void*)copy_pos, sizeof(hInfo)); 402 | copy_pos += sizeof(hInfo); 403 | cvector_pushback(vOutput, &hInfo); 404 | } 405 | free(big_buf); 406 | return TRUE; 407 | } 408 | 409 | 410 | 411 | static BOOL hwBreakpointProcDriver_CleanHwBpInfo(int nDriverLink) { 412 | if (nDriverLink < 0) { 413 | return FALSE; 414 | } 415 | int res = write(nDriverLink, (void*)1, 1); 416 | if (res == 0) { 417 | printf("CleanHwBpInfo write():%s\n", strerror(errno)); 418 | return FALSE; 419 | } 420 | return TRUE; 421 | } 422 | 423 | 424 | static BOOL hwBreakpointProcDriver_CloseHandle(int nDriverLink, uint64_t handle) { 425 | if (nDriverLink < 0) { 426 | return FALSE; 427 | } 428 | if (!handle) { 429 | return FALSE; 430 | } 431 | 432 | char buf[8] = { 0 }; 433 | memcpy(buf, &handle, 8); 434 | 435 | int res = ioctl(nDriverLink, IOCTL_CLOSE_HANDLE, &buf); 436 | if (res != 0) { 437 | printf("CloseHandle ioctl():%s\n", strerror(errno)); 438 | return FALSE; 439 | } 440 | return TRUE; 441 | } 442 | 443 | 444 | 445 | #endif /* HW_BREAKPOINT_MANAGER_H_ */ 446 | -------------------------------------------------------------------------------- /Server/include/api.h: -------------------------------------------------------------------------------- 1 | #ifndef API_H_ 2 | #define API_H_ 3 | 4 | #include 5 | #include 6 | #include 7 | #include "Global.h" 8 | 9 | #include "porthelp.h" 10 | #include "hwbpserver.h" 11 | #ifdef __ANDROID__ 12 | #include 13 | #endif 14 | /* 15 | 16 | #if defined(__arm__) || defined(__ANDROID__) 17 | #include 18 | #else 19 | #include 20 | #endif 21 | */ 22 | 23 | #ifdef HAS_LINUX_USER_H 24 | #include 25 | #else 26 | #include 27 | #endif 28 | 29 | #include 30 | 31 | 32 | /* 33 | struct CeOpenProcess 34 | { 35 | int pid; 36 | uint64_t driverProcessHandle; 37 | }; 38 | */ 39 | 40 | BOOL GetProcessTask(int pid, std::vector & vOutput); 41 | /* 42 | void CloseHandle(HANDLE h); 43 | HANDLE OpenProcess(DWORD pid); 44 | */ 45 | void ProcessAddProcessHwBp(AddProcessHwBpInfo ¶ms, 46 | int &allTaskCount, int &insHwBpSuccessTaskCount, std::vector &vHit); 47 | int ProcessSetHwBpHitConditions(struct HIT_CONDITIONS params); 48 | #ifdef __ANDROID__ 49 | #define LOG_TAG "HWSERVER" 50 | #define LOGD(fmt, args...) __android_log_vprint(ANDROID_LOG_DEBUG, LOG_TAG, fmt, ##args) 51 | #endif 52 | 53 | #endif /* API_H_ */ 54 | -------------------------------------------------------------------------------- /Server/include/cvector.h: -------------------------------------------------------------------------------- 1 | # ifndef __CVECTOR_H__ 2 | # define __CVECTOR_H__ 3 | 4 | # include 5 | # include 6 | # include 7 | 8 | # define MIN_LEN 256 9 | # define CVEFAILED -1 10 | # define CVESUCCESS 0 11 | # define CVEPUSHBACK 1 12 | # define CVEPOPBACK 2 13 | # define CVEINSERT 3 14 | # define CVERM 4 15 | # define EXPANED_VAL 1 16 | # define REDUSED_VAL 2 17 | 18 | typedef void *citerator; 19 | typedef struct _cvector *cvector; 20 | 21 | # ifdef __cplusplus 22 | extern "C" { 23 | # endif 24 | 25 | cvector cvector_create(const size_t size ); 26 | void cvector_destroy (const cvector cv ); 27 | size_t cvector_length (const cvector cv ); 28 | int cvector_pushback (const cvector cv, void *memb ); 29 | int cvector_popback (const cvector cv, void *memb ); 30 | size_t cvector_iter_at (const cvector cv, citerator iter ); 31 | int cvector_iter_val (const cvector cv, citerator iter, void *memb); 32 | citerator cvector_begin (const cvector cv ); 33 | citerator cvector_end (const cvector cv ); 34 | citerator cvector_next (const cvector cv, citerator iter ); 35 | int cvector_val_at (const cvector cv, size_t index, void *memb ); 36 | int cvector_insert (const cvector cv, citerator iter, void *memb); 37 | int cvector_insert_at(const cvector cv, size_t index, void *memb ); 38 | int cvector_rm (const cvector cv, citerator iter ); 39 | int cvector_rm_at (const cvector cv, size_t index ); 40 | 41 | /* for test */ 42 | void cv_info (const cvector cv ); 43 | void cv_print (const cvector cv ); 44 | 45 | # ifdef __cplusplus 46 | } 47 | # endif 48 | 49 | #endif /* EOF file cvector.h */ 50 | 51 | 52 | 53 | // #include "cvector.h" 54 | // 55 | // int main() 56 | // { 57 | // int i = 1; 58 | // cvector cv = cvector_create(sizeof(int)); 59 | // cvector_pushback(cv, &i); 60 | // cvector_pushback(cv, &i); 61 | // cvector_pushback(cv, &i); 62 | // cvector_pushback(cv, &i); 63 | // cv_print(cv); 64 | // cvector_destroy(cv); 65 | // return 0; 66 | // } -------------------------------------------------------------------------------- /Server/include/hwbpserver.h: -------------------------------------------------------------------------------- 1 | #ifndef HWBPSERVER_H_ 2 | #define HWBPSERVER_H_ 3 | 4 | #include 5 | #include 6 | #ifdef linux 7 | #include "porthelp.h" 8 | #include "Global.h" 9 | #endif 10 | 11 | 12 | #define CMD_GETVERSION 0 13 | #define CMD_CLOSECONNECTION 1 14 | #define CMD_TERMINATESERVER 2 15 | #define CMD_OPENPROCESS 3 16 | #define CMD_CLOSEHANDLE 4 17 | #define CMD_SETHITCONDITIONS 5 18 | #define CMD_ADDPROCESSHWBP 6 19 | 20 | 21 | 22 | //extern char *versionstring; 23 | #pragma pack(1) 24 | struct HwBpVersion { 25 | int version; 26 | unsigned char stringsize; 27 | //append the versionstring 28 | }; 29 | struct AddProcessHwBpInfo { 30 | uint32_t pid; 31 | uint64_t address; 32 | uint32_t hwBpAddrLen; 33 | uint32_t hwBpAddrType; 34 | uint32_t hwBpThreadType; 35 | uint32_t hwBpKeepTimeMs; 36 | }; 37 | #pragma pack() 38 | 39 | 40 | #endif /* HWBPSERVER_H_ */ -------------------------------------------------------------------------------- /Server/include/porthelp.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef PORTHELP_H_ 3 | #define PORTHELP_H_ 4 | #include 5 | 6 | typedef int32_t HANDLE; //just an int, in case of a 32-bit ce version and a 64-bit linux version I can not give pointers, so use ID's for handles 7 | typedef int32_t DWORD; 8 | 9 | typedef enum { htEmpty = 0, htProcesHandle} handleType; //The difference between ThreadHandle and NativeThreadHandle is that threadhandle is based on the processid of the thread, the NativeThreadHandle is in linux usually the pthread_t handle 10 | typedef int BOOL; 11 | 12 | 13 | /* 14 | HANDLE CreateHandleFromPointer(uint64_t p, handleType type); 15 | handleType GetHandleType(HANDLE handle); 16 | uint64_t GetPointerFromHandle(HANDLE handle); 17 | */ 18 | #define TRUE 1 19 | #define FALSE 0 20 | 21 | #endif /* PORTHELP_H_ */ 22 | -------------------------------------------------------------------------------- /Server/outputs/libs/arm64-v8a/Kernel_hwBP_Server: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SsageParuders/Android_Kernel_hwBreakPoint/057a92392e17f7c18896084eba4dd2d6a91abfa9/Server/outputs/libs/arm64-v8a/Kernel_hwBP_Server -------------------------------------------------------------------------------- /Server/outputs/obj/local/arm64-v8a/Kernel_hwBP_Server: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SsageParuders/Android_Kernel_hwBreakPoint/057a92392e17f7c18896084eba4dd2d6a91abfa9/Server/outputs/obj/local/arm64-v8a/Kernel_hwBP_Server -------------------------------------------------------------------------------- /Server/outputs/obj/local/arm64-v8a/objs/Kernel_hwBP_Server/src/Global.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SsageParuders/Android_Kernel_hwBreakPoint/057a92392e17f7c18896084eba4dd2d6a91abfa9/Server/outputs/obj/local/arm64-v8a/objs/Kernel_hwBP_Server/src/Global.o -------------------------------------------------------------------------------- /Server/outputs/obj/local/arm64-v8a/objs/Kernel_hwBP_Server/src/Global.o.d: -------------------------------------------------------------------------------- 1 | ./obj/local/arm64-v8a/objs/Kernel_hwBP_Server/src/Global.o: \ 2 | ../src/Global.cpp ../include/Global.h \ 3 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/map \ 4 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__config \ 5 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__tree \ 6 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/iterator \ 7 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/iosfwd \ 8 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/wchar.h \ 9 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__functional_base \ 10 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/type_traits \ 11 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstddef \ 12 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/version \ 13 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/typeinfo \ 14 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/exception \ 15 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstdlib \ 16 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdlib.h \ 17 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstdint \ 18 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdint.h \ 19 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/new \ 20 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/utility \ 21 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__tuple \ 22 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/initializer_list \ 23 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstring \ 24 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/string.h \ 25 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__debug \ 26 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/memory \ 27 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/limits \ 28 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/tuple \ 29 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdexcept \ 30 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/atomic \ 31 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__threading_support \ 32 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/chrono \ 33 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/ctime \ 34 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/ratio \ 35 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/climits \ 36 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/limits.h \ 37 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/errno.h \ 38 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/algorithm \ 39 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/functional \ 40 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/bit \ 41 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__node_handle \ 42 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/optional \ 43 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/vector \ 44 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__bit_reference \ 45 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__split_buffer \ 46 | ../include/api.h ../include/porthelp.h ../include/hwbpserver.h \ 47 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/string \ 48 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/string_view \ 49 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__string \ 50 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstdio \ 51 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdio.h \ 52 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cwchar \ 53 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cwctype \ 54 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cctype \ 55 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/ctype.h \ 56 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/wctype.h \ 57 | ../include/HwBreakpointManager.h ../include/cvector.h \ 58 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/mutex \ 59 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__mutex_base \ 60 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/system_error \ 61 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__errc \ 62 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cerrno 63 | 64 | ../include/Global.h: 65 | 66 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/map: 67 | 68 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__config: 69 | 70 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__tree: 71 | 72 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/iterator: 73 | 74 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/iosfwd: 75 | 76 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/wchar.h: 77 | 78 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__functional_base: 79 | 80 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/type_traits: 81 | 82 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstddef: 83 | 84 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/version: 85 | 86 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/typeinfo: 87 | 88 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/exception: 89 | 90 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstdlib: 91 | 92 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdlib.h: 93 | 94 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstdint: 95 | 96 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdint.h: 97 | 98 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/new: 99 | 100 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/utility: 101 | 102 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__tuple: 103 | 104 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/initializer_list: 105 | 106 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstring: 107 | 108 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/string.h: 109 | 110 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__debug: 111 | 112 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/memory: 113 | 114 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/limits: 115 | 116 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/tuple: 117 | 118 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdexcept: 119 | 120 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/atomic: 121 | 122 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__threading_support: 123 | 124 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/chrono: 125 | 126 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/ctime: 127 | 128 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/ratio: 129 | 130 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/climits: 131 | 132 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/limits.h: 133 | 134 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/errno.h: 135 | 136 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/algorithm: 137 | 138 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/functional: 139 | 140 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/bit: 141 | 142 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__node_handle: 143 | 144 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/optional: 145 | 146 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/vector: 147 | 148 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__bit_reference: 149 | 150 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__split_buffer: 151 | 152 | ../include/api.h: 153 | 154 | ../include/porthelp.h: 155 | 156 | ../include/hwbpserver.h: 157 | 158 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/string: 159 | 160 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/string_view: 161 | 162 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__string: 163 | 164 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstdio: 165 | 166 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdio.h: 167 | 168 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cwchar: 169 | 170 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cwctype: 171 | 172 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cctype: 173 | 174 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/ctype.h: 175 | 176 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/wctype.h: 177 | 178 | ../include/HwBreakpointManager.h: 179 | 180 | ../include/cvector.h: 181 | 182 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/mutex: 183 | 184 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__mutex_base: 185 | 186 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/system_error: 187 | 188 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__errc: 189 | 190 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cerrno: 191 | -------------------------------------------------------------------------------- /Server/outputs/obj/local/arm64-v8a/objs/Kernel_hwBP_Server/src/api.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SsageParuders/Android_Kernel_hwBreakPoint/057a92392e17f7c18896084eba4dd2d6a91abfa9/Server/outputs/obj/local/arm64-v8a/objs/Kernel_hwBP_Server/src/api.o -------------------------------------------------------------------------------- /Server/outputs/obj/local/arm64-v8a/objs/Kernel_hwBP_Server/src/api.o.d: -------------------------------------------------------------------------------- 1 | ./obj/local/arm64-v8a/objs/Kernel_hwBP_Server/src/api.o: ../src/api.cpp \ 2 | ../include/api.h \ 3 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdint.h \ 4 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__config \ 5 | ../include/Global.h \ 6 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/map \ 7 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__tree \ 8 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/iterator \ 9 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/iosfwd \ 10 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/wchar.h \ 11 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__functional_base \ 12 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/type_traits \ 13 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstddef \ 14 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/version \ 15 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/typeinfo \ 16 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/exception \ 17 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstdlib \ 18 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdlib.h \ 19 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstdint \ 20 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/new \ 21 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/utility \ 22 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__tuple \ 23 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/initializer_list \ 24 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstring \ 25 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/string.h \ 26 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__debug \ 27 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/memory \ 28 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/limits \ 29 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/tuple \ 30 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdexcept \ 31 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/atomic \ 32 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__threading_support \ 33 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/chrono \ 34 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/ctime \ 35 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/ratio \ 36 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/climits \ 37 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/limits.h \ 38 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/errno.h \ 39 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/algorithm \ 40 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/functional \ 41 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/bit \ 42 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__node_handle \ 43 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/optional \ 44 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/vector \ 45 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__bit_reference \ 46 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__split_buffer \ 47 | ../include/HwBreakpointManager.h \ 48 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdio.h \ 49 | ../include/cvector.h \ 50 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/mutex \ 51 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__mutex_base \ 52 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/system_error \ 53 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__errc \ 54 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cerrno \ 55 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/string \ 56 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/string_view \ 57 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__string \ 58 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstdio \ 59 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cwchar \ 60 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cwctype \ 61 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cctype \ 62 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/ctype.h \ 63 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/wctype.h \ 64 | ../include/porthelp.h ../include/hwbpserver.h \ 65 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/sstream \ 66 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/ostream \ 67 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/ios \ 68 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__locale \ 69 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/locale.h \ 70 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/support/android/locale_bionic.h \ 71 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/streambuf \ 72 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/locale \ 73 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstdarg \ 74 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__bsd_locale_fallbacks.h \ 75 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/bitset \ 76 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/istream \ 77 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/random \ 78 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cmath \ 79 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/math.h \ 80 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/numeric \ 81 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cinttypes \ 82 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/inttypes.h 83 | 84 | ../include/api.h: 85 | 86 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdint.h: 87 | 88 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__config: 89 | 90 | ../include/Global.h: 91 | 92 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/map: 93 | 94 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__tree: 95 | 96 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/iterator: 97 | 98 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/iosfwd: 99 | 100 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/wchar.h: 101 | 102 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__functional_base: 103 | 104 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/type_traits: 105 | 106 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstddef: 107 | 108 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/version: 109 | 110 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/typeinfo: 111 | 112 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/exception: 113 | 114 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstdlib: 115 | 116 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdlib.h: 117 | 118 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstdint: 119 | 120 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/new: 121 | 122 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/utility: 123 | 124 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__tuple: 125 | 126 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/initializer_list: 127 | 128 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstring: 129 | 130 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/string.h: 131 | 132 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__debug: 133 | 134 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/memory: 135 | 136 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/limits: 137 | 138 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/tuple: 139 | 140 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdexcept: 141 | 142 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/atomic: 143 | 144 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__threading_support: 145 | 146 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/chrono: 147 | 148 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/ctime: 149 | 150 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/ratio: 151 | 152 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/climits: 153 | 154 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/limits.h: 155 | 156 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/errno.h: 157 | 158 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/algorithm: 159 | 160 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/functional: 161 | 162 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/bit: 163 | 164 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__node_handle: 165 | 166 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/optional: 167 | 168 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/vector: 169 | 170 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__bit_reference: 171 | 172 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__split_buffer: 173 | 174 | ../include/HwBreakpointManager.h: 175 | 176 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdio.h: 177 | 178 | ../include/cvector.h: 179 | 180 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/mutex: 181 | 182 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__mutex_base: 183 | 184 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/system_error: 185 | 186 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__errc: 187 | 188 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cerrno: 189 | 190 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/string: 191 | 192 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/string_view: 193 | 194 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__string: 195 | 196 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstdio: 197 | 198 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cwchar: 199 | 200 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cwctype: 201 | 202 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cctype: 203 | 204 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/ctype.h: 205 | 206 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/wctype.h: 207 | 208 | ../include/porthelp.h: 209 | 210 | ../include/hwbpserver.h: 211 | 212 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/sstream: 213 | 214 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/ostream: 215 | 216 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/ios: 217 | 218 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__locale: 219 | 220 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/locale.h: 221 | 222 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/support/android/locale_bionic.h: 223 | 224 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/streambuf: 225 | 226 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/locale: 227 | 228 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstdarg: 229 | 230 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__bsd_locale_fallbacks.h: 231 | 232 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/bitset: 233 | 234 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/istream: 235 | 236 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/random: 237 | 238 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cmath: 239 | 240 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/math.h: 241 | 242 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/numeric: 243 | 244 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cinttypes: 245 | 246 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/inttypes.h: 247 | -------------------------------------------------------------------------------- /Server/outputs/obj/local/arm64-v8a/objs/Kernel_hwBP_Server/src/cvector.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SsageParuders/Android_Kernel_hwBreakPoint/057a92392e17f7c18896084eba4dd2d6a91abfa9/Server/outputs/obj/local/arm64-v8a/objs/Kernel_hwBP_Server/src/cvector.o -------------------------------------------------------------------------------- /Server/outputs/obj/local/arm64-v8a/objs/Kernel_hwBP_Server/src/cvector.o.d: -------------------------------------------------------------------------------- 1 | ./obj/local/arm64-v8a/objs/Kernel_hwBP_Server/src/cvector.o: \ 2 | ../src/cvector.c ../include/cvector.h \ 3 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdio.h \ 4 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__config \ 5 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdlib.h \ 6 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/string.h 7 | 8 | ../include/cvector.h: 9 | 10 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdio.h: 11 | 12 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__config: 13 | 14 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdlib.h: 15 | 16 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/string.h: 17 | -------------------------------------------------------------------------------- /Server/outputs/obj/local/arm64-v8a/objs/Kernel_hwBP_Server/src/main.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SsageParuders/Android_Kernel_hwBreakPoint/057a92392e17f7c18896084eba4dd2d6a91abfa9/Server/outputs/obj/local/arm64-v8a/objs/Kernel_hwBP_Server/src/main.o -------------------------------------------------------------------------------- /Server/outputs/obj/local/arm64-v8a/objs/Kernel_hwBP_Server/src/main.o.d: -------------------------------------------------------------------------------- 1 | ./obj/local/arm64-v8a/objs/Kernel_hwBP_Server/src/main.o: ../src/main.cpp \ 2 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdio.h \ 3 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__config \ 4 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdlib.h \ 5 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/string.h \ 6 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/thread \ 7 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/iosfwd \ 8 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/wchar.h \ 9 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__functional_base \ 10 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/type_traits \ 11 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/typeinfo \ 12 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/exception \ 13 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstddef \ 14 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstdlib \ 15 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/version \ 16 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstdint \ 17 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdint.h \ 18 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/new \ 19 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/utility \ 20 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__tuple \ 21 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/initializer_list \ 22 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstring \ 23 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__debug \ 24 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/functional \ 25 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/memory \ 26 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/limits \ 27 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/iterator \ 28 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/tuple \ 29 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdexcept \ 30 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/atomic \ 31 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__threading_support \ 32 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/chrono \ 33 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/ctime \ 34 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/ratio \ 35 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/climits \ 36 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/limits.h \ 37 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/errno.h \ 38 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/system_error \ 39 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__errc \ 40 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cerrno \ 41 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/string \ 42 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/string_view \ 43 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__string \ 44 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/algorithm \ 45 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/bit \ 46 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstdio \ 47 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cwchar \ 48 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cwctype \ 49 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cctype \ 50 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/ctype.h \ 51 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/wctype.h \ 52 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__mutex_base \ 53 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cinttypes \ 54 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/inttypes.h \ 55 | ../include/hwbpserver.h ../include/api.h ../include/Global.h \ 56 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/map \ 57 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__tree \ 58 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__node_handle \ 59 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/optional \ 60 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/vector \ 61 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__bit_reference \ 62 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__split_buffer \ 63 | ../include/HwBreakpointManager.h ../include/cvector.h \ 64 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/mutex \ 65 | ../include/porthelp.h 66 | 67 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdio.h: 68 | 69 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__config: 70 | 71 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdlib.h: 72 | 73 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/string.h: 74 | 75 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/thread: 76 | 77 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/iosfwd: 78 | 79 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/wchar.h: 80 | 81 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__functional_base: 82 | 83 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/type_traits: 84 | 85 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/typeinfo: 86 | 87 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/exception: 88 | 89 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstddef: 90 | 91 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstdlib: 92 | 93 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/version: 94 | 95 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstdint: 96 | 97 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdint.h: 98 | 99 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/new: 100 | 101 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/utility: 102 | 103 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__tuple: 104 | 105 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/initializer_list: 106 | 107 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstring: 108 | 109 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__debug: 110 | 111 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/functional: 112 | 113 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/memory: 114 | 115 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/limits: 116 | 117 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/iterator: 118 | 119 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/tuple: 120 | 121 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdexcept: 122 | 123 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/atomic: 124 | 125 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__threading_support: 126 | 127 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/chrono: 128 | 129 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/ctime: 130 | 131 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/ratio: 132 | 133 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/climits: 134 | 135 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/limits.h: 136 | 137 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/errno.h: 138 | 139 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/system_error: 140 | 141 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__errc: 142 | 143 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cerrno: 144 | 145 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/string: 146 | 147 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/string_view: 148 | 149 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__string: 150 | 151 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/algorithm: 152 | 153 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/bit: 154 | 155 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstdio: 156 | 157 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cwchar: 158 | 159 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cwctype: 160 | 161 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cctype: 162 | 163 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/ctype.h: 164 | 165 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/wctype.h: 166 | 167 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__mutex_base: 168 | 169 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cinttypes: 170 | 171 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/inttypes.h: 172 | 173 | ../include/hwbpserver.h: 174 | 175 | ../include/api.h: 176 | 177 | ../include/Global.h: 178 | 179 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/map: 180 | 181 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__tree: 182 | 183 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__node_handle: 184 | 185 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/optional: 186 | 187 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/vector: 188 | 189 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__bit_reference: 190 | 191 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__split_buffer: 192 | 193 | ../include/HwBreakpointManager.h: 194 | 195 | ../include/cvector.h: 196 | 197 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/mutex: 198 | 199 | ../include/porthelp.h: 200 | -------------------------------------------------------------------------------- /Server/outputs/obj/local/arm64-v8a/objs/Kernel_hwBP_Server/src/porthelp.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SsageParuders/Android_Kernel_hwBreakPoint/057a92392e17f7c18896084eba4dd2d6a91abfa9/Server/outputs/obj/local/arm64-v8a/objs/Kernel_hwBP_Server/src/porthelp.o -------------------------------------------------------------------------------- /Server/outputs/obj/local/arm64-v8a/objs/Kernel_hwBP_Server/src/porthelp.o.d: -------------------------------------------------------------------------------- 1 | ./obj/local/arm64-v8a/objs/Kernel_hwBP_Server/src/porthelp.o: \ 2 | ../src/porthelp.cpp \ 3 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stddef.h \ 4 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__config \ 5 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/string.h \ 6 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdlib.h \ 7 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/random \ 8 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstddef \ 9 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstdint \ 10 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdint.h \ 11 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cmath \ 12 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/math.h \ 13 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/version \ 14 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/type_traits \ 15 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/initializer_list \ 16 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/limits \ 17 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/algorithm \ 18 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstring \ 19 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/utility \ 20 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__tuple \ 21 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__debug \ 22 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/iosfwd \ 23 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/wchar.h \ 24 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/memory \ 25 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/typeinfo \ 26 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/exception \ 27 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstdlib \ 28 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/new \ 29 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/iterator \ 30 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__functional_base \ 31 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/tuple \ 32 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdexcept \ 33 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/atomic \ 34 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__threading_support \ 35 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/chrono \ 36 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/ctime \ 37 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/ratio \ 38 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/climits \ 39 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/limits.h \ 40 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/errno.h \ 41 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/functional \ 42 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/bit \ 43 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/numeric \ 44 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/vector \ 45 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__bit_reference \ 46 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__split_buffer \ 47 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/string \ 48 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/string_view \ 49 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__string \ 50 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstdio \ 51 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdio.h \ 52 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cwchar \ 53 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cwctype \ 54 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cctype \ 55 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/ctype.h \ 56 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/wctype.h \ 57 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/istream \ 58 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/ostream \ 59 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/ios \ 60 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__locale \ 61 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/mutex \ 62 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__mutex_base \ 63 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/system_error \ 64 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__errc \ 65 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cerrno \ 66 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/locale.h \ 67 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/support/android/locale_bionic.h \ 68 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/streambuf \ 69 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/locale \ 70 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstdarg \ 71 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__bsd_locale_fallbacks.h \ 72 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/bitset \ 73 | ../include/porthelp.h ../include/Global.h \ 74 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/map \ 75 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__tree \ 76 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__node_handle \ 77 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/optional \ 78 | ../include/api.h ../include/hwbpserver.h \ 79 | ../include/HwBreakpointManager.h ../include/cvector.h 80 | 81 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stddef.h: 82 | 83 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__config: 84 | 85 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/string.h: 86 | 87 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdlib.h: 88 | 89 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/random: 90 | 91 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstddef: 92 | 93 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstdint: 94 | 95 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdint.h: 96 | 97 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cmath: 98 | 99 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/math.h: 100 | 101 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/version: 102 | 103 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/type_traits: 104 | 105 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/initializer_list: 106 | 107 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/limits: 108 | 109 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/algorithm: 110 | 111 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstring: 112 | 113 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/utility: 114 | 115 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__tuple: 116 | 117 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__debug: 118 | 119 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/iosfwd: 120 | 121 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/wchar.h: 122 | 123 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/memory: 124 | 125 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/typeinfo: 126 | 127 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/exception: 128 | 129 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstdlib: 130 | 131 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/new: 132 | 133 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/iterator: 134 | 135 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__functional_base: 136 | 137 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/tuple: 138 | 139 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdexcept: 140 | 141 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/atomic: 142 | 143 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__threading_support: 144 | 145 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/chrono: 146 | 147 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/ctime: 148 | 149 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/ratio: 150 | 151 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/climits: 152 | 153 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/limits.h: 154 | 155 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/errno.h: 156 | 157 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/functional: 158 | 159 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/bit: 160 | 161 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/numeric: 162 | 163 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/vector: 164 | 165 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__bit_reference: 166 | 167 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__split_buffer: 168 | 169 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/string: 170 | 171 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/string_view: 172 | 173 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__string: 174 | 175 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstdio: 176 | 177 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/stdio.h: 178 | 179 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cwchar: 180 | 181 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cwctype: 182 | 183 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cctype: 184 | 185 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/ctype.h: 186 | 187 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/wctype.h: 188 | 189 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/istream: 190 | 191 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/ostream: 192 | 193 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/ios: 194 | 195 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__locale: 196 | 197 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/mutex: 198 | 199 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__mutex_base: 200 | 201 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/system_error: 202 | 203 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__errc: 204 | 205 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cerrno: 206 | 207 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/locale.h: 208 | 209 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/support/android/locale_bionic.h: 210 | 211 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/streambuf: 212 | 213 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/locale: 214 | 215 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/cstdarg: 216 | 217 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__bsd_locale_fallbacks.h: 218 | 219 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/bitset: 220 | 221 | ../include/porthelp.h: 222 | 223 | ../include/Global.h: 224 | 225 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/map: 226 | 227 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__tree: 228 | 229 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/__node_handle: 230 | 231 | /home/ssage/Desktop/ToolChains/android-ndk-r23b/sources/cxx-stl/llvm-libc++/include/optional: 232 | 233 | ../include/api.h: 234 | 235 | ../include/hwbpserver.h: 236 | 237 | ../include/HwBreakpointManager.h: 238 | 239 | ../include/cvector.h: 240 | -------------------------------------------------------------------------------- /Server/src/Global.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | /* 3 | std::map g_HandlePointList; 4 | */ 5 | CHwBreakpointManager g_Driver; 6 | -------------------------------------------------------------------------------- /Server/src/api.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | 12 | 13 | //获取当前进程所有的task 14 | BOOL GetProcessTask(int pid, std::vector & vOutput) { 15 | DIR *dir = NULL; 16 | struct dirent *ptr = NULL; 17 | char szTaskPath[256] = { 0 }; 18 | sprintf(szTaskPath, "/proc/%d/task", pid); 19 | 20 | dir = opendir(szTaskPath); 21 | if (NULL != dir) { 22 | while ((ptr = readdir(dir)) != NULL) // 循环读取路径下的每一个文件/文件夹 23 | { 24 | // 如果读取到的是"."或者".."则跳过,读取到的不是文件夹名字也跳过 25 | if ((strcmp(ptr->d_name, ".") == 0) || (strcmp(ptr->d_name, "..") == 0)) { 26 | continue; 27 | } else if (ptr->d_type != DT_DIR) { 28 | continue; 29 | } else if (strspn(ptr->d_name, "1234567890") != strlen(ptr->d_name)) { 30 | continue; 31 | } 32 | 33 | int task = atoi(ptr->d_name); 34 | vOutput.push_back(task); 35 | } 36 | closedir(dir); 37 | return TRUE; 38 | } 39 | return FALSE; 40 | } 41 | 42 | /* 43 | void CloseHandle(HANDLE h) 44 | { 45 | int i; 46 | handleType ht = GetHandleType(h); 47 | uint64_t pl = GetPointerFromHandle(h); 48 | 49 | printf("CloseHandle %d %ld\n", h, pl); 50 | 51 | if (ht == htProcesHandle) 52 | { 53 | std::unique_ptr save((CeOpenProcess*)pl); 54 | g_Driver.CloseHandle(save->driverProcessHandle); 55 | } 56 | 57 | } 58 | 59 | HANDLE OpenProcess(DWORD pid) 60 | { 61 | //check if this process has already been opened 62 | for (auto item = g_HandlePointList.begin(); item != g_HandlePointList.end(); item++) 63 | { 64 | if (item->second.type == htProcesHandle) 65 | { 66 | std::unique_ptr ceOpenProcess((CeOpenProcess*)item->second.p); 67 | if (ceOpenProcess->pid == pid) 68 | { 69 | ceOpenProcess.release(); 70 | return item->first; 71 | } 72 | ceOpenProcess.release(); 73 | } 74 | } 75 | //still here, so not opened yet 76 | 77 | //驱动_打开进程 78 | uint64_t driverProcessHandle = g_Driver.OpenProcess(pid); 79 | if (driverProcessHandle == 0) 80 | { 81 | return 0; 82 | } 83 | std::unique_ptr ceOpenProcessOpen = std::make_unique(); 84 | ceOpenProcessOpen->pid = pid; 85 | ceOpenProcessOpen->driverProcessHandle = driverProcessHandle; 86 | return CreateHandleFromPointer((uint64_t)ceOpenProcessOpen.release(), htProcesHandle); 87 | } 88 | */ 89 | 90 | void ProcessAddProcessHwBp(AddProcessHwBpInfo ¶ms, 91 | int &allTaskCount, int &insHwBpSuccessTaskCount, std::vector &vHit) { 92 | allTaskCount = 0; 93 | insHwBpSuccessTaskCount = 0; 94 | //储存需要下断的线程列表 95 | std::vector vTask; 96 | if (params.hwBpThreadType == 0) //硬件下断全部线程 97 | { 98 | //获取当前进程所有的task 99 | GetProcessTask(params.pid, vTask); 100 | 101 | } else if (params.hwBpThreadType == 1) //硬件下断主线程 102 | { 103 | vTask.push_back(params.pid); 104 | } else if (params.hwBpThreadType == 2) //硬件除主线程之外的其他线程 105 | { 106 | //获取当前进程所有的task 107 | GetProcessTask(params.pid, vTask); 108 | 109 | //删除主线程 110 | for (auto iter = vTask.begin(); iter != vTask.end(); iter++) { 111 | if (*iter == params.pid) { 112 | vTask.erase(iter); 113 | break; 114 | } 115 | } 116 | } 117 | 118 | allTaskCount = vTask.size(); 119 | 120 | 121 | //硬件断点句柄 122 | std::vector vHwBpHandle; 123 | for (int i = 0; i < vTask.size(); i++) { 124 | //打开task 125 | uint64_t hProcess = g_Driver.OpenProcess(vTask.at(i)); 126 | if (hProcess) { 127 | //驱动_新增硬件断点,返回值:TRUE成功,FALSE失败 128 | uint64_t hwBpHandle = g_Driver.AddProcessHwBp( 129 | hProcess, params.address, 130 | params.hwBpAddrLen, params.hwBpAddrType); 131 | 132 | if (hwBpHandle) { 133 | vHwBpHandle.push_back(hwBpHandle); 134 | 135 | printf("result of AddProcessHwBp=%" PRIu64 "\n", hwBpHandle); 136 | 137 | 138 | } 139 | 140 | } 141 | 142 | } 143 | insHwBpSuccessTaskCount = vHwBpHandle.size(); 144 | 145 | if (vHwBpHandle.size()) { 146 | //有成功的下断 147 | usleep(params.hwBpKeepTimeMs * 1000); //delay ms 148 | 149 | //删除进程硬件断点 150 | for (uint64_t hwBpHandle : vHwBpHandle) { 151 | g_Driver.DelProcessHwBp(hwBpHandle); 152 | printf("Call DelProcessHwBp(%" PRIu64 ")\n", hwBpHandle); 153 | } 154 | 155 | //读取硬件断点命中信息 156 | for (uint64_t hwBpHandle : vHwBpHandle) { 157 | BOOL b = g_Driver.ReadHwBpInfo(hwBpHandle, vHit); 158 | printf("Call ReadProcessHwBp(%" PRIu64 ") %d\n", hwBpHandle, b); 159 | } 160 | //清空硬件断点命中信息 161 | g_Driver.CleanHwBpInfo(); 162 | printf("Call CleanHwBpInfo()\n"); 163 | } 164 | 165 | return; 166 | } 167 | 168 | int ProcessSetHwBpHitConditions(HIT_CONDITIONS params) { 169 | //驱动_设置硬件断点命中记录条件,返回值:TRUE成功,FALSE失败 170 | return g_Driver.SetHwBpHitConditions(params); 171 | } 172 | -------------------------------------------------------------------------------- /Server/src/cvector.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #ifndef __gnu_linux__ 4 | //#define __func__ "unknown" 5 | //#define inline __forceinline 6 | #endif 7 | 8 | # define CWARNING_ITER(cv, iter, file, func, line) \ 9 | do {\ 10 | if ((cvector_begin(cv) > iter) || (cvector_end(cv) <= iter)) {\ 11 | fprintf(stderr, "var(" #iter ") warng out of range, "\ 12 | "at file:%s func:%s line:%d!!\n", file, func, line);\ 13 | return CVEFAILED;\ 14 | }\ 15 | } while (0) 16 | 17 | 18 | struct _cvector 19 | { 20 | void *cv_pdata; 21 | size_t cv_len, cv_tot_len, cv_size; 22 | }; 23 | 24 | 25 | cvector cvector_create(const size_t size) 26 | { 27 | cvector cv = (cvector)malloc(sizeof (struct _cvector)); 28 | 29 | if (!cv) return NULL; 30 | 31 | cv->cv_pdata = malloc(MIN_LEN * size); 32 | 33 | if (!cv->cv_pdata) 34 | { 35 | free(cv); 36 | return NULL; 37 | } 38 | 39 | cv->cv_size = size; 40 | cv->cv_tot_len = MIN_LEN; 41 | cv->cv_len = 0; 42 | 43 | return cv; 44 | } 45 | 46 | void cvector_destroy(const cvector cv) 47 | { 48 | free(cv->cv_pdata); 49 | free(cv); 50 | return; 51 | } 52 | 53 | size_t cvector_length(const cvector cv) 54 | { 55 | return cv->cv_len; 56 | } 57 | 58 | int cvector_pushback(const cvector cv, void *memb) 59 | { 60 | if (cv->cv_len >= cv->cv_tot_len) 61 | { 62 | void *pd_sav = cv->cv_pdata; 63 | cv->cv_tot_len <<= EXPANED_VAL; 64 | cv->cv_pdata = realloc(cv->cv_pdata, cv->cv_tot_len * cv->cv_size); 65 | 66 | if (!cv->cv_pdata) 67 | { 68 | cv->cv_pdata = pd_sav; 69 | cv->cv_tot_len >>= EXPANED_VAL; 70 | return CVEPUSHBACK; 71 | } 72 | } 73 | 74 | memcpy((char *)cv->cv_pdata + cv->cv_len * cv->cv_size, memb, cv->cv_size); 75 | cv->cv_len++; 76 | 77 | return CVESUCCESS; 78 | } 79 | 80 | int cvector_popback(const cvector cv, void *memb) 81 | { 82 | if (cv->cv_len <= 0) return CVEPOPBACK; 83 | 84 | cv->cv_len--; 85 | memcpy(memb, (char *)cv->cv_pdata + cv->cv_len * cv->cv_size, cv->cv_size); 86 | 87 | if ((cv->cv_tot_len >= (MIN_LEN << REDUSED_VAL)) 88 | && (cv->cv_len <= (cv->cv_tot_len >> REDUSED_VAL))) 89 | { 90 | void *pd_sav = cv->cv_pdata; 91 | cv->cv_tot_len >>= EXPANED_VAL; 92 | cv->cv_pdata = realloc(cv->cv_pdata, cv->cv_tot_len * cv->cv_size); 93 | 94 | if (!cv->cv_pdata) 95 | { 96 | cv->cv_tot_len <<= EXPANED_VAL; 97 | cv->cv_pdata = pd_sav; 98 | return CVEPOPBACK; 99 | } 100 | } 101 | 102 | return CVESUCCESS; 103 | } 104 | 105 | size_t cvector_iter_at(const cvector cv, citerator iter) 106 | { 107 | CWARNING_ITER(cv, iter, __FILE__, __func__, __LINE__); 108 | return ((char *)iter - (char *)cv->cv_pdata) / cv->cv_size; 109 | } 110 | 111 | int cvector_iter_val(const cvector cv, citerator iter, void *memb) 112 | { 113 | CWARNING_ITER(cv, iter, __FILE__, __func__, __LINE__); 114 | memcpy(memb, iter, cv->cv_size); 115 | return 0; 116 | } 117 | 118 | citerator cvector_begin(const cvector cv) 119 | { 120 | return cv->cv_pdata; 121 | } 122 | 123 | citerator cvector_end(const cvector cv) 124 | { 125 | return (char *)cv->cv_pdata + (cv->cv_size * cv->cv_len); 126 | } 127 | 128 | static inline void cvmemove_foreward(const cvector cv, void *from, void *to) 129 | { 130 | size_t size = cv->cv_size; 131 | char *p; 132 | for (p = (char *)to; p >= (char *)from; p -= size) memcpy(p + size, p, size); 133 | return; 134 | } 135 | 136 | static inline void cvmemove_backward(const cvector cv, void *from, void *to) 137 | { 138 | memcpy(from, (char *)from + cv->cv_size, (char *)to - (char *)from); 139 | return; 140 | } 141 | 142 | int cvector_insert(const cvector cv, citerator iter, void *memb) 143 | { 144 | CWARNING_ITER(cv, iter, __FILE__, __func__, __LINE__); 145 | 146 | if (cv->cv_len >= cv->cv_tot_len) 147 | { 148 | void *pd_sav = cv->cv_pdata; 149 | cv->cv_tot_len <<= EXPANED_VAL; 150 | cv->cv_pdata = realloc(cv->cv_pdata, cv->cv_tot_len * cv->cv_size); 151 | 152 | if (!cv->cv_pdata) 153 | { 154 | cv->cv_pdata = pd_sav; 155 | cv->cv_tot_len >>= EXPANED_VAL; 156 | return CVEINSERT; 157 | } 158 | } 159 | 160 | cvmemove_foreward(cv, iter, (char *)cv->cv_pdata + cv->cv_len * cv->cv_size); 161 | memcpy(iter, memb, cv->cv_size); 162 | cv->cv_len++; 163 | 164 | return CVESUCCESS; 165 | } 166 | 167 | int cvector_insert_at(const cvector cv, size_t index, void *memb) 168 | { 169 | citerator iter; 170 | 171 | if (index >= cv->cv_tot_len) 172 | { 173 | cv->cv_len = index + 1; 174 | while (cv->cv_len >= cv->cv_tot_len) cv->cv_tot_len <<= EXPANED_VAL; 175 | cv->cv_pdata = realloc(cv->cv_pdata, cv->cv_tot_len * cv->cv_size); 176 | iter = (char *)cv->cv_pdata + cv->cv_size * index; 177 | memcpy(iter, memb, cv->cv_size); 178 | } 179 | else 180 | { 181 | iter = (char *)cv->cv_pdata + cv->cv_size * index; 182 | cvector_insert(cv, iter, memb); 183 | } 184 | 185 | return 0; 186 | } 187 | 188 | citerator cvector_next(const cvector cv, citerator iter) 189 | { 190 | return (char *)iter + cv->cv_size; 191 | } 192 | 193 | int cvector_val(const cvector cv, citerator iter, void *memb) 194 | { 195 | memcpy(memb, iter, cv->cv_size); 196 | return 0; 197 | } 198 | 199 | int cvector_val_at(const cvector cv, size_t index, void *memb) 200 | { 201 | memcpy(memb, (char *)cv->cv_pdata + index * cv->cv_size, cv->cv_size); 202 | return 0; 203 | } 204 | 205 | int cvector_rm(const cvector cv, citerator iter) 206 | { 207 | citerator from; 208 | citerator end; 209 | CWARNING_ITER(cv, iter, __FILE__, __func__, __LINE__); 210 | from = iter; 211 | end = cvector_end(cv); 212 | memcpy(from, (char *)from + cv->cv_size, (char *)end - (char *)from); 213 | cv->cv_len--; 214 | 215 | if ((cv->cv_tot_len >= (MIN_LEN << REDUSED_VAL)) 216 | && (cv->cv_len <= (cv->cv_tot_len >> REDUSED_VAL))) 217 | { 218 | void *pd_sav = cv->cv_pdata; 219 | cv->cv_tot_len >>= EXPANED_VAL; 220 | cv->cv_pdata = realloc(cv->cv_pdata, cv->cv_tot_len * cv->cv_size); 221 | 222 | if (!cv->cv_pdata) 223 | { 224 | cv->cv_tot_len <<= EXPANED_VAL; 225 | cv->cv_pdata = pd_sav; 226 | return CVERM; 227 | } 228 | } 229 | 230 | return CVESUCCESS; 231 | } 232 | 233 | int cvector_rm_at(const cvector cv, size_t index) 234 | { 235 | citerator iter; 236 | iter = (char *)cv->cv_pdata + cv->cv_size * index; 237 | CWARNING_ITER(cv, iter, __FILE__, __func__, __LINE__); 238 | return cvector_rm(cv, iter); 239 | } 240 | 241 | void cv_info(const cvector cv) 242 | { 243 | printf("\n\ntot :%s : %d\n", __func__, cv->cv_tot_len); 244 | printf("len :%s : %d\n", __func__, cv->cv_len); 245 | printf("size:%s : %d\n\n", __func__, cv->cv_size); 246 | return; 247 | } 248 | 249 | void cv_print(const cvector cv) 250 | { 251 | int num; 252 | citerator iter; 253 | 254 | if (cvector_length(cv) == 0) 255 | fprintf(stderr, "file:%s func:%s line:%d error, null length cvector!!\n", __FILE__, __func__, __LINE__); 256 | 257 | for (iter = cvector_begin(cv); 258 | iter != cvector_end(cv); 259 | iter = cvector_next(cv, iter)) 260 | { 261 | cvector_iter_val(cv, iter, &num); 262 | printf("var:%d at:%d\n", num, cvector_iter_at(cv, iter)); 263 | } 264 | 265 | return; 266 | } 267 | -------------------------------------------------------------------------------- /Server/src/main.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SsageParuders/Android_Kernel_hwBreakPoint/057a92392e17f7c18896084eba4dd2d6a91abfa9/Server/src/main.cpp -------------------------------------------------------------------------------- /Server/src/porthelp.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | /* 8 | HANDLE CreateHandleFromPointer(uint64_t p, handleType type) 9 | { 10 | std::random_device rd; 11 | HANDLE handle = 10000 + rd() / 1000; 12 | handle = handle < 0 ? -handle : handle; 13 | while (g_HandlePointList.find(handle) != g_HandlePointList.end()) 14 | { 15 | handle = 10000 + rd() / 1000; 16 | handle = handle < 0 ? -handle : handle; 17 | } 18 | 19 | HANDLE_INFO hinfo = { 0 }; 20 | hinfo.p = p; 21 | hinfo.type = type; 22 | g_HandlePointList.insert( 23 | std::pair(handle, hinfo)); 24 | 25 | return handle; 26 | } 27 | 28 | handleType GetHandleType(HANDLE handle) 29 | { 30 | auto item = g_HandlePointList.find(handle); 31 | if (item == g_HandlePointList.end()) 32 | { 33 | return htEmpty; 34 | } 35 | return item->second.type; 36 | } 37 | 38 | uint64_t GetPointerFromHandle(HANDLE handle) 39 | { 40 | auto item = g_HandlePointList.find(handle); 41 | if (item == g_HandlePointList.end()) 42 | { 43 | return 0; 44 | } 45 | return item->second.p; 46 | } 47 | 48 | */ -------------------------------------------------------------------------------- /cvector.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SsageParuders/Android_Kernel_hwBreakPoint/057a92392e17f7c18896084eba4dd2d6a91abfa9/cvector.c -------------------------------------------------------------------------------- /cvector.h: -------------------------------------------------------------------------------- 1 | # ifndef __CVECTOR_H__ 2 | # define __CVECTOR_H__ 3 | 4 | #include 5 | # define MIN_LEN 256 6 | # define CVEFAILED -1 7 | # define CVESUCCESS 0 8 | # define CVEPUSHBACK 1 9 | # define CVEPOPBACK 2 10 | # define CVEINSERT 3 11 | # define CVERM 4 12 | # define EXPANED_VAL 1 13 | # define REDUSED_VAL 2 14 | 15 | typedef void *citerator; 16 | typedef struct _cvector *cvector; 17 | 18 | # ifdef __cplusplus 19 | extern "C" { 20 | # endif 21 | 22 | cvector cvector_create(const size_t size ); 23 | void cvector_destroy (const cvector cv ); 24 | size_t cvector_length (const cvector cv ); 25 | int cvector_pushback (const cvector cv, void *memb ); 26 | int cvector_popback (const cvector cv, void *memb ); 27 | size_t cvector_iter_at (const cvector cv, citerator iter ); 28 | int cvector_iter_val (const cvector cv, citerator iter, void *memb); 29 | citerator cvector_begin (const cvector cv ); 30 | citerator cvector_end (const cvector cv ); 31 | citerator cvector_next (const cvector cv, citerator iter ); 32 | int cvector_val_at (const cvector cv, size_t index, void *memb ); 33 | int cvector_insert (const cvector cv, citerator iter, void *memb); 34 | int cvector_insert_at(const cvector cv, size_t index, void *memb ); 35 | int cvector_rm (const cvector cv, citerator iter ); 36 | int cvector_rm_at (const cvector cv, size_t index ); 37 | 38 | /* for test */ 39 | void cv_info (const cvector cv ); 40 | void cv_print (const cvector cv ); 41 | 42 | # ifdef __cplusplus 43 | } 44 | # endif 45 | 46 | #endif /* EOF file cvector.h */ -------------------------------------------------------------------------------- /hwBreakpointProc.ko: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SsageParuders/Android_Kernel_hwBreakPoint/057a92392e17f7c18896084eba4dd2d6a91abfa9/hwBreakpointProc.ko -------------------------------------------------------------------------------- /proc.h: -------------------------------------------------------------------------------- 1 | #ifndef PROC_H_ 2 | #define PROC_H_ 3 | #include 4 | #include 5 | #include "ver_control.h" 6 | static inline struct pid * get_proc_pid_struct(int nPid) { 7 | return find_get_pid(nPid); 8 | } 9 | static inline int get_proc_pid(struct pid* proc_pid_struct) { 10 | return proc_pid_struct->numbers[0].nr; 11 | } 12 | static inline void release_proc_pid_struct(struct pid* proc_pid_struct) { 13 | put_pid(proc_pid_struct); 14 | } 15 | #endif /* PROC_H_ */ -------------------------------------------------------------------------------- /res/Client.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SsageParuders/Android_Kernel_hwBreakPoint/057a92392e17f7c18896084eba4dd2d6a91abfa9/res/Client.png -------------------------------------------------------------------------------- /res/MFC.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SsageParuders/Android_Kernel_hwBreakPoint/057a92392e17f7c18896084eba4dd2d6a91abfa9/res/MFC.png -------------------------------------------------------------------------------- /sys.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SsageParuders/Android_Kernel_hwBreakPoint/057a92392e17f7c18896084eba4dd2d6a91abfa9/sys.c -------------------------------------------------------------------------------- /ver_control.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SsageParuders/Android_Kernel_hwBreakPoint/057a92392e17f7c18896084eba4dd2d6a91abfa9/ver_control.h -------------------------------------------------------------------------------- /vermagic: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SsageParuders/Android_Kernel_hwBreakPoint/057a92392e17f7c18896084eba4dd2d6a91abfa9/vermagic --------------------------------------------------------------------------------