IDA动态调试

Python018

IDA动态调试,第1张

IDA

先将android_server push到模拟器或者真机上

如果遇到端口被占用,可以通过以下命令结束程序

选择 go - Debugger - Attach - Remote ARMLinux/Android debugger

ctrl-F搜索到需要的进程双击,稍等一会。

记下图中的8620,此时的虫子红色的

接下来就可以愉快的调试了

F2下断点(HEX View下为修改指令和保存指令)

F4移动到光标处

F7进入函数

F8单步调试

F9跳到下一个断点

G调到函数地址

N重名

Y修改参数

A识别为字符串

D data解析成数据

更多调试快捷键参考下面的文章

https://blog.csdn.net/jitaliangliang111/article/details/103672074

matlab下如何除错c函式 zz

double add(double x,double y){ return x + y} MEX档案介面函式 void mexFunction(int nlhs, mxArray *plhs[],int nrhs, const mxArray *prhs[]) {double *adouble b, cplhs[0] = mxCreateDoubleMatrix(1, 1, mxREAL)a = mxGetPr(plhs[0])b = *(mxGetPr(prhs[0]))c = *(mxGetPr(prhs[1]))*a = add(b, c)}以上已经建立好了add.c档案啦。然后进行以下步骤: 步1、在matlab命令列 mex -setup,然后选择编译器,我们这选择microsoft的VC++ 6.0. 步2、在matlab命令列输入 mex add.c -output add,这时会产生连结add.mexw32。 如果你是要一个除错版本,就在命令列中加上-g开关。如果你对C/C++编译器还有些引数要指定,可以将 /bin/win32/mexopts/msvc60opts.bat拷贝到当前目录下修改之,再加上-f 就行了。例如:我们这用mex add.c -g -output add,这里除了产生add.mexw32,还有add.ilk,add.pdb。 步3、在cmd下键入msdev 目录\add.mexw32。现在,vc打开了,开启你要除错的C/C++档案,这个例子中就是add.c,设定好断点,按Alt+F7,在 Debug表单的Excuitable for debug session中键入D:\Program Files\MATLAB71\bin\win32\matlab.exe(matlab的安装目录)就行了。按F5,MATLAB就被开启,好,可以工作了,在命令列输入add(1,2)然后程式就会在add.c设定了断点的地方中断。这时只有在VC下除错就行。^_^

matlab 如何打出ierfc函式

绘制自定义函式的方法至少有两种:一种用plot函式,一种用fplot函式。以下以y=3x^3-2x+3(0<=x<=5)为例分别介绍这两种方法。

方法一:定义向量x和向量y,然后plot画图即可,具体程式码:

x=0:0.01:5

y=3.*x.^3-2.*x+3

plot(x,y)

结果:

方法二:定义匿名函式f,然后用fplot画图,具体程式码:

f=@(x) 3*x^3-2*x+3

fplot(f,[0,5])

结果:

windows下qt4中如何呼叫C函式

应该有很多方法,以下只是其中的一种,用于计算该函式被呼叫次数

void fun()

{

static int count = 0

count++

cout<<count

}

go语言如何呼叫c函式

直接嵌入c原始码到go程式码里面

package main

/*

#include <stdio.h>

void myhello(int i) {

printf("Hello C: %d\n", i)

}

*/

import "C"

import "fmt"

func main() {

C.myhello(C.int(12))

fmt.Println("Hello Go")

}

需要注意的是C程式码必须放在注释里面

import "C"语句和前面的C程式码之间不能有空行

执行结果

$ go build main.go &&./main

Hello C: 12

Hello Go

分开c程式码到单独档案

嵌在一起程式码结构不是很好看,很多人包括我,还是喜欢把两个分开,放在不同的档案里面,显得干净,go原始档里面是go的原始码,c原始档里面是c的原始码。

$ ls

hello.c hello.h main.go

$ cat hello.h

void hello(int)

$ cat hello.c

#include <stdio.h>

void hello(int i) {

printf("Hello C: %d\n", i)

}

$ cat main.go

package main

#include "hello.h"

import "C"

import "fmt"

func main() {

C.hello(C.int(12))

fmt.Println("Hello Go")

}

编译执行

$ go build &&./main

Hello C: 12

Hello Go

编译成库档案

如果c档案比较多,最好还是能够编译成一个独立的库档案,然后go来呼叫库。

$ find mylib main

mylib

mylib/hello.h

mylib/hello.c

main

main/main.go

编译库档案

$ cd mylib

# g -fPIC -shared -o libhello.so hello.c

编译go程式

$ cd main

$ cat main.go

package main

#cgo CFLAGS: -I../mylib

#cgo LDFLAGS: -L../mylib -lhello

#include "hello.h"

import "C"

import "fmt"

func main() {

C.hello(C.int(12))

fmt.Println("Hello Go")

}

$ go build main.go

执行

$ export LD_LIBRARY_PATH=../mylib

$ ./main

Hello C: 12

Hello Go

在我们的例子中,库档案是编译成动态库的,main程式连结的时候也是采用的动态库

$ ldd main

linux-vdso.so.1 =>(0x00007fffc7968000)

libhello.so =>../mylib/libhello.so (0x00007f513684c000)

libpthread.so.0 =>/lib64/libpthread.so.0 (0x00007f5136614000)

libc.so.6 =>/lib64/libc.so.6 (0x00007f5136253000)

/lib64/ld-linux-x86-64.so.2 (0x000055d819227000)

理论上讲也是可以编译成整个一静态连结的可执行程式,由于我的机器上缺少静态连结的系统库,比如libc.a,所以只能编译成动态连结。

如何除错 Navicat for PostgreSQL 函式

Navicat for PostgreSQL 触发器常规属性:

限制:勾选此项,建立一个限制触发器。

触发器型别:可供选择的触发器型别有 Table 或 View。需要注意的是,适用于PostgreSQL 9.0 或以上版本。

表名或检视名:选择表或检视。

BEFORE:当尝试在行操作前,可以指定触发触发器。

AFTER:当尝试在行操作后,可以指定触发触发器。

INSTEAD OF:指定触发触发器来代替尝试在行操作。

INSERT/UPDATE/DELETE:选择启用触发器的事件。

插入:每当一个新行插入表,触发器会被启用。

更新:每当修改一个行,触发器会被启用。

删除:每当从表删除一个行,触发器会被启用。

TRUNCATE:触发器定义为触发 TRUNCATE。

更新栏位:指定一个列列表。如果至少一个列在 UPDATE 命令提及为目标,触发器将会触发。

STATEMENT:指定触发器过程在每个 SQL 语句触发一次。

ROW:指定触发器过程在触发器事件影响一行时触发一次。

当:指定一个布林值 WHEN 条件,测试触发器是否应该被触发,该功能支援 PostgreSQL 9.0 或以上版本。

触发函式模式和触发函式:使用者提供的函式,被宣告为没有引数及返回型别触发器,当触发器触发时执行。

函式引数:一个当触发器执行时,指供给函式的可选逗号分隔引数列表,引数是文字字串常数。简单的名和数字常数可以写在这里,但它们都将被转换为字串。请检查触发函式的实施语言描述,关于如何可访问触发器引数,它可能和正常函式引数不同。

Navicat for PostgreSQL 触发器限制:

可搁置:可搁置限制。

最初立即:在每个语句后检查限制。

最初搁置:只在事务结束时检查限制。

参考表模式和参考表名:限制参考表的模式和名。

【求助】matlab如何求解sinc函式的反函式

for k=1:length(y)

f=@(x)y(k)*x-sin(x)

ezplot(f)%画图,观察函式零点在x0(k)附近

z(k)=fzero(f,x0(k))%呼叫fzero函式找零点

endsxf2012(站内联络TA)%%以y为一个数据为例,假设y值为y0,则令

%f=@(x)y0-sin(x)/x%%用命令:%ezplot(f)

%%画图,观察函式,随便找零点附近的一个座标x0

%% 则,要求的零点为

%z=fzero(f,x0)%呼叫fzero函式找零点

%比如y0=0.6,通过令

f=@(x)0.6-sin(x)/x%画图ezplot(f)hold onplot(,,'r')

%观察知,零点在-2和2附近,用

z1=fzero(f,-2)

%计算得零点为x=-1.66

z2=fzero(f,2)

%计算得零点为x=1.66

这是y=sinx/x的曲线图。我的情况是y的值是已知的,我需要把x的全部值求出来,即想通过反函式来求得。但是问题是,y=1时x是一个值,但y=0.8是两个值,y=0.1就是许多值。

这是y=sinx/x的曲线图。我的情况是y的值是已知的,我需要把x的全部值求出来,即想通过反函式来求得。但是 ... 在你画的区间上,函式不是单调的,所以其反函式不存在的,或者说是个多值函式。

51微控制器汇编如何呼叫C函式?

先宣告,后调出。

若C语言函式名为ABC,汇编的入口符号为_ABC。

例:CALL _ABC ,就呼叫的了ABC涵数。

至于如何宣告,如何传函式引数,就要查编译器的使用说明了。

我也没这么做过,一般是高阶语言呼叫低阶语言,只是一个建议。

matlab 的plotroc函式怎么呼叫

matlab 的plotroc函式主要是绘制ROC曲线。

ROC曲线是通用的分类器评价工具,matlab函式中自带了绘制该曲线的函式plotroc。

plotroc函式的原型为:plotroc(targets, outputs)

其中引数targets是一个矩阵,代表测试集,每一列表示一个测试样本的标签

如果有两类样本,比如第1,2,5个样本属于第1类,第3,4,6个样本属于第2类....则targets应为:

1 1 0 0 1 0 ...

0 0 1 1 0 1 ...

如果只有一类样本,包含了负样本,则只要一行,用1表示正样本,0表示负样本即可,比如targets为:

1 0 1 1 0 0 0 0 1 ...

引数outputs也是一个矩阵,代表分类结果,同样每一列表示一个测试样本的分类结果

同样如果有两类样本,则应有两个分类器,每一列记录了每个测试样本在两个分类器上的得分,此时outputs为:

0.8 0.85 0.2 0.75 0.21 ...

0.8 0.01 0.9 0.23 0.67 ...

如果只有一类,则outputs只有一行,如:

0.8 0.6 0.8 0.7 0.05 0.3 0.03 ...

注意,得分必须在[0, 1]的区间内,可以自己规约一下。

我们将相应的测试标签targets和对应的分类得分outputs输入plotroc中就可以绘制出相应的ROC曲线了。

有人问起,我也就在网上搜了一下,发现还有很多人不会用,写下来以供参考,欢迎指正。

如何除错Android SO中的init函式

1.Root装置

Root许可权下才能快乐除错。

使用市面上的各种Root师傅工具。

2.连线装置

将装置开启除错模式在开发者选项里。

将IDA安装目录中dbgsrv资料夹下的android_server推送到装置系统目录并赋可执行许可权。在高于IDA6.6版本才能除错高版本android,此时除错低版本Android SO时,需要使用的是android_nonpipe。

在PC端输入命令:

adb shell su

adb shell android_server的路径/android_server

保持上面视窗,在命令列视窗进行埠转发:

adb forward tcp:23946 tcp:23946

为什么是23946呢,IDA和push进装置的android_server预设用都用23946埠进行通讯。当然可以修改。

3.开启IDA

附加或者启动程序的过程不再多言。

4.定位INIT函式

比较便捷的方法是找一份与装置同系统版本号的android原始码。解析执行SO档案的地方在linker.c(cpp)中。

因为不同版本有差异,我就不上图了。

高版本时在do_dlopen()下的CallConstructors()里面,但是编译系统时往往将其和find_library融合在其父函式中,查询时需注意。一个简便方法是原始码中搜索“INIT”四个字.

先将装置中的linker pull出来用IDA分析来确定呼叫INIT的具 *** 置。

因为linker在Android程序中载入非常早,所以它在IDA中的地址可以不用修正直接拿来用。

5.下断在INIT

下断点后,执行Apk中触发载入该SO的功能。

正常情况下就能停在该SO的INIT前了。

如何在QT中写C函式?

/********MyButton.h*********/

#ifndef MYBUTTON_H_

#define MYBUTTON_H_

#include<iostream>

#include <QtGui/QPushButton>

#include <QtGui/QWidget>

class MyButton : public QPushButton

{

Q_OBJECT

public:

MyButton(const QString &text, QWidget * parent)

~MyButton()

public:

void setLed(int argc, char *argv[])

public slots:

void sendButtonText()

private:

signals:

void isClickButton(const QString &text)

}

#endif

[cpp] view plain copy

/**********MyButton.cpp************/

#include "MyButton.h"

extern "C"{

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include <sys/ioctl.h>

#include<sys/types.h>

#include<sys/stat.h>

#include<ftl.h>

void MyButton::setLed(int argc, char *argv[]){

int on

int led_number

int fd

if (argc != 3 || sscanf(argv[1], "%d", &led_number) != 1 || sscanf(argv[2],"%d", &on) != 1 ||

on <0 || on >1 || led_number <0 || led_number >3) {

fprintf(stderr, "Usage:\n")

fprintf(stderr, "\t led led_number on|off\n")

fprintf(stderr, "Options:\n")

fprintf(stderr, "\t led_number from 0 to 3\n")

fprintf(stderr, "\t on 1 off 0\n")

exit(1)

}

fd = open("/dev/led", 0)

if (fd <0) {

perror("open device /dev/led")

exit(1)

}

ioctl(fd, on, led_number)

::close(fd)请注意,此处如果要呼叫C语言库中的close()一定要加上“::",否则程式将到当前类的作用域中寻找close()方法,导致不明错误。

}

}

MyButton::MyButton(const QString &text,QWidget *widget)

:QPushButton(text,widget)

{

connect(this,SIGNAL(clicked()),this,SLOT(sendButtonText()))

}

MyButton::~MyButton()

{

}

void MyButton::sendButtonText(){

emit isClickButton(this->text())

char open_1[]="1"

char open_2[]="1"

char open_3[]="1"

char *o1=open_1

char *o2=open_2

char *o3=open_3

char close_1[]="1"

char close_2[]="1"

char close_3[]="0"

char *c1=close_1

char *c2=close_2

char *c3=close_3

char *open[]={o1,o2,o3}

char *close[]={c1,c2,c3}

QString *str=new QString(this->text())

if((str->pare("mb1"))==0){

std::cout<<"mb1 is clicked!\n"

setLed(3,open)

}

if((str->pare("mb2"))==0){

std::cout<<"mb2 is clicked!\n"

setLed(3,close)

}

}

하루하루를 그대 없이 살아도

halu halu leul keu de obsi salado

每天每天没有你生活

하루하루를 그댈 잊고 살아도

halu halu leul keudel igo salado

每天每天忘记你生活

사랑 없이 살수 있다고

salang obsi salsu idago

我决心没有爱情也能生活

그대 없이 살수 있다고 다짐하고 또 합니다

keude obsi salsu idago tajimhago do habnida

没有你也能生活

매일 매일을 눈물로 살아가

meil meileul nun mul lo salaga

每天都流著眼泪

매일 매일을 견디며 살아가

meil meileul kyondi myo salaga

每天都是煎熬

이렇게 난 잊지 못하고

oloke nan iji motago

我无法忘记了

마 지못해 살고 있다고

ma jimuhe salgo idago

得不就这样继续生活

때늦은 후회합니다

deneujeun huhui habnida

后悔已经晚了

가고 나면 깨닫는 게 사랑입니다

kago namyon gedanen ge salang ib nida

走了那麽多路才领会到那就是爱情

자고 나면 올 것 같은 그대입니다

chago namyon ul go gateun keude ib ni da

休息一段时间之后你就会回来吧

DŽ 08를 아프게 해도 나를 슬프게 해도 그대 같은 사람 없습니다

naleul apeuge hedo naleul seulpeuge hedo

keude gateun salang ib nida

没有像你这样给我痛苦有给了我悲伤的人

알다가도 모르는 게 사랑입니다

alda gado moleunen ge salang ibnida

不能完全理的是爱请

아파해도 그리운 게 사랑입니다

apa hedo keuli un ge salang ibnida

即使痛苦也会想念的是爱情

그댈 지우려 해도 그댈 버리려 해도

keudel ji u lyo hedo keudel bolilyo hedo

即使想抹去想丢掉

나의 사랑은 오직 그대입니다

na eui salang en oji keude ibnida

我爱的还是你

매일 매일을 바쁜 척 살아가

meil meileul babeun chyu salaga

假装每天生活的很忙碌

매일 매일을 힘겹게 살아가

meil meileul himqyoqe salaga

每天每天都辛苦的生活

어떻게든 잊어본다고

odoke den ijyo bondago

这样不能忘

수도 없이 다짐해 봐도

sudo obsi tajinhe bwado

下定的决心

또 다시 무너집니다

so tasi muno jib ni da

又再次坍塌

가고 나면 깨닫는 게 사랑입니다

kago namyon gedanen ge salang ib nida

走了那麽多路才领会到那就是爱情

자고 나면 올 것 같은 그대입니다

chago namyon ul go gateun keude ib ni da

休息一段时间之后你就会回来吧

나를 아프게 해도 나를 슬프게 해도 그대 같은 사람 없습니다

naleul apeuge hedo naleul seulpeuge hedo

keude gateun salang ib nida

没有像你这样给我痛苦有给了我悲伤的人

알다가도 모르는 게 사랑입니다

alda gado moleunen ge salang ibnida

不能完全理的是爱请

아파해도 그리운 게 사랑입니다

apa hedo keuli un ge salang ibnida

即使痛苦也会想念的是爱情

그댈 지우려 해도 그댈 버리려 해도

keudel ji u lyo hedo keudel bolilyo hedo

即使想抹去想丢掉

난 안됩니다

nan andui ni da

我还是做不到

이별하고 이별해도 사랑입니다

ibyolago ibyohedo salang ibnida

即使离别在离别也是爱

미워하고 미워해도 사랑입니다

niwonhago miwohedo salang ibnida

憎恨在憎恨也是爱

가고 나면 깨닫는 게 사랑입니다

kago namyon gedanen ge salang ib nida

走了那麽多路才领会到那就是爱情

자고 나면 올 것 같은 그대입니다

chago namyon ul go gateun keude ib ni da

休息一段