當前位置:首頁 » 編程軟體 » 棧的反編譯

棧的反編譯

發布時間: 2022-07-17 14:32:16

『壹』 棧的逆轉

s->base=(int *)malloc(num*sizeof(int));
應該就出在這句上了
你的S是一個指針, 沒有申請內存就訪問你成員,這個是有問題的

先給s分配內存

『貳』 棧的操作原則是什麼

堆棧使用兩種基本操作:推入(壓棧,push)和彈出(彈棧,pop):

1、推入:將資料放入堆棧頂端,堆棧頂端移到新放入的資料。

2、彈出:將堆棧頂端資料移除,堆棧頂端移到移除後的下一筆資料。

特點

堆棧的基本特點:

1、先入後出,後入先出。

2、除頭尾節點之外,每個元素有一個前驅,一個後繼。

軟體堆棧

堆棧可以用數組和鏈表兩種方式實現,一般為一個堆棧預先分配一個大小固定且較合適的空間並非難事,所以較流行的做法是Stack結構下含一個數組。如果空間實在緊張,也可用鏈表實現,且去掉表頭。

這里的常式是以C語言實現的。

(2)棧的反編譯擴展閱讀:

基本演算法

一、進棧(PUSH)演算法

1、若TOP≥n時,則給出溢出信息,作出錯處理(進棧前首先檢查棧是否已滿,滿則溢出;不滿則作2);

2、置TOP=TOP+1(棧指針加1,指向進棧地址);

3、S(TOP)=X,結束(X為新進棧的元素);

二、退棧(POP)演算法

1、若TOP≤0,則給出下溢信息,作出錯處理(退棧前先檢查是否已為空棧, 空則下溢;不空則作2);

2、X=S(TOP),(退棧後的元素賦給X):

3、TOP=TOP-1,結束(棧指針減1,指向棧頂)。

『叄』 用C寫棧的源代碼

#include <stdio.h>
#include <malloc.h>

#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define ERROR -1
#define OK 1
#define TRUE 1
#define FALSE 0

typedef int status;
typedef int ElemType;

typedef struct{
ElemType data;
ElemType *base;
ElemType *top;
int stacksize;
}Stack,*SqStack;

status InitStack(Stack &S){
//構造一個空棧
S.base=(ElemType *)malloc(STACK_INIT_SIZE*sizeof(ElemType));
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return OK;
}//InitStack

status GetTop(Stack &S,ElemType &e){
//若棧不空,則用e返回S的棧頂元素,並返回OK;否則返回ERROR
if(S.top==S.base) return ERROR;
e= * (S.top-1);
return OK;
}//GetTop

status Push(Stack &S,ElemType e){
//插入元素e為新的棧頂元素
if(S.top-S.base>=S.stacksize){
S.base=(ElemType *)realloc(S.base,
(S.stacksize+STACKINCREMENT) * sizeof(ElemType));
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
return OK;
}//Push

status Pop(Stack &S,ElemType &e){
//若棧不空,則刪除S的棧頂元素,用e返回其值,並返回OK;否則返回ERROR
if(S.top==S.base) return ERROR;
e= * --S.top;
return OK;
}//Pop

『肆』 反編譯DLL工具

關鍵看是什麼語言編寫的。
我所知道的有:
如果是C#
Reflector
PB,
則有PBkiller
如果是c、c++、delphi,
則只能反編譯成c,並且和原先的基本上不一樣

『伍』 反編譯exe文件就是把exe還原為匯編

首先了解一下概念,exe程序只是WIN下PE格式的可執行文件的一種,而所謂的計算機執行的代碼只是一串二進制數,跟數據沒區別,當CS,EIP指向哪,哪裡就是程序,而匯編語言之所以叫最底層的語言,是因為, 匯編的每一個語法,都應對了一串二進制的指令,這也就是反匯編的原理,所以NO1.一、反編譯exe程序 就是 把 exe 還原為匯編語言嗎?,這句話,不能叫還原,應該叫解釋,「解釋」的東西,沒還原的那麼逼真,比如,在匯編源程序中所有的標號和注釋,進行編譯後,變成二進制可執行文件後,在反匯編,標號就變成數字了,而注釋更是沒了..... 二、除了 還原為 匯編語言,還能 反編譯為 其他高級語言嗎?不能,高級語言的語法是建立在大量的計算機二進制代碼之上的,比如你C語言隨便調用一個子函數,到了二進制中,他是先壓棧,參數(編譯後參數從右往左壓,每個語言還不一樣),然後就是call 子函數,子函數運行後,他還要清理堆棧,所以你一個句簡單的高級語言,其實蘊含了大量的代碼,而高級語言編譯後的程序,就脫離了他的開發環境,樓上說的會引起你誤會,java的中間碼,可以用他自帶的反編譯工具,因為Java不是編譯器,而是解釋器,所以他不編譯,只是解釋他的中間碼NO2.所有的exe都可以反匯編,但是你要注意,不只exe這種pe格式,linux下可執行文件是elf,所以你在反匯編的時候,要注意可執行文件的文件的頭,而早期的DOS只是純二進制代碼,沒有頭文件,這個很重要,你要反匯編什麼格式,就要選擇相應的工具NO3.exe反匯編,當然是OD,不過,我對OD不熟悉,好像他只支持WIN下的反匯編

『陸』 一個關於棧的輸入輸出問題

A: 先入1 2,然後出2,然後人3,出3,最後出1
B: 1 2 3依次入棧,然後依次出棧
C: 此答案3先出棧,說明此時 1 2 3都已經先入棧且都未出棧,1肯定在2後出棧。
D: 1入 1出;2入 2出;3入 3出

『柒』 java反編譯中iload是什麼意思

iload 是jvm指令,將指定的int型本地變數推送至棧頂;
你應該看的是位元組碼吧;
java反編譯工具jd gui,應該是看不到jvm指令的;
關於jvm指令,你網上搜一下可以了解了;
asm.jar java位元組碼生成開源框架有興趣可以學習一下,這個可以了解jvm指令。

『捌』 C語言中的棧實現進制轉換

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

#define MAXSIZE 100

typedef int DataType;
typedef struct{
DataType data[MAXSIZE];
int top;
}SeqStack,*PSeqStack;

PSeqStack Init_SeqStack(void)
{
PSeqStack S;
S=(PSeqStack)malloc(sizeof(SeqStack));
if(S)
S->top=-1;
return S;
}

int Push_SeqStack(PSeqStack S,DataType x)
{
if (S->top==MAXSIZE-1)
return 0;
else
{
S->top++;
S->data[S->top]=x;
return 1;
}
}

int Empty_SeqStack(PSeqStack S)
{
if(S->top==-1)
return 1;
else
return 0;
}

int Pop_SeqStack(PSeqStack S,DataType *x)
{
if(Empty_SeqStack(S))
return 0;
else
{
*x=S->data[S->top];
S->top--;
return -1;
}
}

void Destory_SeqStack(PSeqStack *S)
{
if(*S)
free(*S);
*S=NULL;
return;
}

typedef int DataType;
int conversation(int n,int r)
{
PSeqStack S;
DataType x;
if(!r)
{
printf("基數不能為0");
return(0);
}
S=Init_SeqStack();
if(!S)
{
printf("棧初始化失敗");
return(0);
}
while(n)
{
Push_SeqStack(S,n%r);
n=n/r;
}
while (!Empty_SeqStack(S))
{
Pop_SeqStack(S,&x);
printf("%d",x);
}
Destory_SeqStack(&S);
return 0;
}

void main()
{
int i,a;
printf("輸入要轉換的進制!!\n");
scanf("%d",&a);
printf("輸入要轉換的數!!\n");
scanf("%d",&i);
conversation(i,a);
}

熱點內容
db2新建資料庫 發布:2024-09-08 08:10:19 瀏覽:170
頻率計源碼 發布:2024-09-08 07:40:26 瀏覽:778
奧迪a6哪個配置帶後排加熱 發布:2024-09-08 07:06:32 瀏覽:100
linux修改apache埠 發布:2024-09-08 07:05:49 瀏覽:208
有多少個不同的密碼子 發布:2024-09-08 07:00:46 瀏覽:566
linux搭建mysql伺服器配置 發布:2024-09-08 06:50:02 瀏覽:995
加上www不能訪問 發布:2024-09-08 06:39:52 瀏覽:811
銀行支付密碼器怎麼用 發布:2024-09-08 06:39:52 瀏覽:513
蘋果手機清理瀏覽器緩存怎麼清理緩存 發布:2024-09-08 06:31:32 瀏覽:554
雲伺服器的優點與缺點 發布:2024-09-08 06:30:34 瀏覽:734