stacks

bcc-tools工具之profile

血红的双手。 提交于 2020-04-07 19:38:09
profile是用于追踪程序执行调用流程的工具,类似于perf中的-g指令 相比perf -g而言,profile功能化更加细分,可以根据需要选择追踪层面,例如-U(用户要调用流程) -K (内核态调用流程) 下面具体介绍该工具的使用 采用profile --help,我们可以看到如下介绍: usage: profile [-h] [-p PID] [-U | -K] [-F FREQUENCY | -c COUNT] [-d] [-a] [-f] [--stack-storage-size STACK_STORAGE_SIZE] [-C CPU] [duration] Profile CPU stack traces at a timed interval positional arguments: duration duration of trace, in seconds # profile的持续时间 optional arguments: -h, --help show this help message and exit -p PID, --pid PID profile this PID only # 只追踪该pid的调用流程 -U, --user-stacks-only                   # 查看用户态函数调用流程 show stacks from

2020牛客寒假算法基础集训营4 B:括号序列

你。 提交于 2020-02-13 10:35:43
B : 括号序列 考察点 : 栈 坑点 : 只有栈空时才是合法的 Code: #include <stack> #include <cstdio> #include <string> #include <cstring> #include <iostream> #include <algorithm> using namespace std; string str; stack<char>stacks; int main(void) { cin >> str; bool flag = true; for(int i = 0; i < str.length(); i ++) { if(stacks.size() == 0) { stacks.push(str[i]); continue; } if(str[i] == '(' || str[i] == '{' || str[i] == '[') { stacks.push(str[i]); } else if(str[i] == ')' && stacks.top() == '(' && stacks.size() != 0) { stacks.pop(); } else if(str[i] == '}' && stacks.top() == '{' && stacks.size() != 0) { stacks.pop(); }

【数据结构与算法】二叉树的遍历

让人想犯罪 __ 提交于 2020-01-28 09:52:48
前序遍历是指,对于树中的任意节点来说,先打印这个节点,然后再打印它的左子树,最后打印它的右子树。 中序遍历是指,对于树中的任意节点来说,先打印它的左子树,然后再打印它本身,最后打印它的右子树。 后序遍历是指,对于树中的任意节点来说,先打印它的左子树,然后再打印它的右子树,最后打印这个节点本身。 层次遍历是指,对树中的节点一层一层的打印,其实就是广度优先算法(BFS)。 一、前序遍历 LeetCode: https://leetcode-cn.com/problems/binary-tree-preorder-traversal/ C语言代码实现: 1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * struct TreeNode *left; 6 * struct TreeNode *right; 7 * }; 8 */ 9 10 11 /** 12 * Note: The returned array must be malloced, assume caller calls free(). 13 */ 14 15 /* 获取树的节点个数 */ 16 int getTreeNodeLen(struct TreeNode* root) 17 { 18 if (root

DEBUGGING BIBLE : Windbg ANSI Command

跟風遠走 提交于 2019-12-30 07:22:07
title {"SOS Commands"} body {"SOS Commands"} {"Load SOS and SOSEX"} {".loadby sos mscorwks;.load sosex"} {"Modules"} {"All Modules"} {"lm D sm"} {"Loaded Modules"} {"lmo D sm"} {"Loaded Modules (verbose)"} {"lmvo D sm"} {"Modules w/o symbols"} {"lme D sm"} {"Threads"} {"Managed Threads"} {"!threads"} {"Native Threads"} {"~"} {"Thread Pool Threads"} {"!threadpool"} {"Sync Block Deadlocks"} {"!dlk"} {"Stacks"} {"Current Managed Stack"} {"!clrstack"} {"Current Managed Stack Parameters and Locals"} {"!vars -w"} {"Current Native Stack"} {"kP"} {"Current Dump Stack"} {"!dumpstack"} {"All Managed

WinDbg常用命令系列---.cmdtree

淺唱寂寞╮ 提交于 2019-12-06 00:09:49
.cmdtree 简介 使用形式 .cmdtree cmdfile 参数 cmdfile 命令文件,包含多个你需要的命令 使用步骤 1、使用命令创建文本文件CMDTREE.TXT,使用以下示例作为模板。您可以按所需方式修改{}之间的节: windbg ANSI Command Tree 1.0 title {"Common Commands"} body {"Common Commands"} {"Information"} {"Time of dump"} {".time"} {"Process being debugged"} {"|"} {"Dump Location"} {"||"} {"Create server on port 9999"} {".server tcp:port=9999"} {"Show remote connections"} {".clients"} {"Process Environment Block"} {"!peb"} {"Logging"} {"Open Log"} {".logopen /t /u /d"} {"Close Log"} {".logclose"} {"Modules"} {"All Modules"} {"lm D sm"} {"Loaded Modules"} {"lmo D sm"} {"Loaded Modules

汇编子程序模块化(near&far)

人走茶凉 提交于 2019-12-05 08:40:48
1: Near 近端使用 C语言实现: #include <stdio.h> #include <stdlib.h> void print(){ printf("proc"); } int main(int argc, char *argv[]) { print(); return 0; } 汇编实现: datas segment x db 'proc$'; datas ends stacks segment stack dw 100 dup(?) stacks ends codes segment assume cs:codes,ss:stacks,ds:datas main proc ; 主程序 start: mov ax,datas; mov ds,ax; call max mov ah,4ch; int 21h main endp print proc near ;子程序 push bp; mov bp,sp; mov dx,offset x; mov ah,09; int 21h pop bp ret 0 print endp codes ends end start near 调用没有段地址:使用的就是偏移地址 call 000C 地址就是子程序的入口地址 2: Far 远端使用 print 函数我们实现在另一个文件, C语言默认函数的extern的 也就是全局的 //

bit电信专业汇编上机考试三星题开源

放肆的年华 提交于 2019-12-04 16:26:09
北理的汇编期末题其实也没太大难度,很多三星题都是C里面写过的非常容易的题目,而且因为允许提前准备,所以难度又降低了很多,我下面的代码基本上都是自己敲得(不排除有一些算法去网上搜了一下借鉴了一下别人的),另外不完全排除留有bug的可能性,因为我也不是每个用例都测试过了。 也可以看出我这个人的风格,就是喜欢疯狂开堆栈,疯狂写子程序,能封装的东西就一直封装到祖坟里去,毕竟我搞嵌入式软件搞得比较多,那种能封装就封装的工程思想就算是写这种百来行的代码也很难改掉习惯。 在多模块设计中,主模块中调用内部模块buf1,buf2,buf3,buf4。主模块根据键盘输入的指令(如:a,b,c,d)调用上述对应的子程序,每个子程序的任务是显示其入口地址。调用后继续等待调用,若输入ESC键(ASCII码为1BH)则结束程序的执行。请编写完成该任务的程序。 没有什么特别难的地方,主要是得注意一下DISPLAY那边的写法 MOV CL,04H ROL BX,CL ;只能用CL做循环移位,每次移动4位 AND AX,0FH ;取低4位,然后单独打印 打印字母要用到ADD 07H 入口获取就直接在DATA SEGMENT里面声明DW的几个变量,然后声明PROC的时候用它们就行了 DATA SEGMENT BUF DB 10 DB ? DB 10 DUP('$') NEWLINE DB 0DH,0AH,'$'