[解決済み] アセンブリの制約
2022-02-14 05:54:16
質問
strlenの実装をアセンブリで自作したが、正しい値を返さない。文字列の長さ+4が返される。その結果 理由がわからない...誰かわかる人がいればいいのだが...
アセンブリのソースです。
section .text
[GLOBAL stringlen:] ; C function
stringlen:
push ebp
mov ebp, esp ; setup the stack frame
mov ecx, [ebp+8]
xor eax, eax ; loop counter
startLoop:
xor edx, edx
mov edx, [ecx+eax]
inc eax
cmp edx, 0x0 ; null byte
jne startLoop
end:
pop ebp
ret
そして、メインルーチン。
#include <stdio.h>
extern int stringlen(char *);
int main(void)
{
printf("%d", stringlen("h"));
return 0;
}
ありがとうございます。
解決方法は?
バイト(文字)ではなく、ダブルワードにアクセスしています。ですから、このコードでは終端のゼロを1つだけ探しているのではなく、連続した4つのゼロを探しているのです。文字列の後のメモリに何が含まれているかによって、常に正しい値+4が返されるとは限らないことに注意してください。
修正するには、バイトアクセスを使用する必要があります。
edx
から
dl
.
関連
-
[解決済み] gzip: stdin: not in gzip format tar: 子プロセスがステータス 1 を返しました。エラーは回復不可能:現在終了中
-
[解決済み】CentOSのエラー - sudo: effective uid is not 0, is sudo installed setuid root?
-
[解決済み】git clone時に「'https'のリモートヘルパーが見つかりません。
-
[解決済み] DiffコマンドとGrepで "バイナリファイル(標準入力)が一致 "と表示される。
-
[解決済み] tar: エラーは回復不可能:現在終了中
-
[解決済み] シェルで 'exec ls' を実行すると何が起こるか、またその理由は?[クローズド]。
-
[解決済み] Linuxです。WGET -i オプションを使用したスキームが見つからない
-
[解決済み] 共有ライブラリの読み込み中にエラーが発生しました: libncurses.so.5:
-
[解決済み] 負荷警告: エントリ シンボル _start が見つかりません
-
[解決済み] Collatz予想の検証を行うC++のコードは、なぜ手書きのアセンブリよりも高速に動作するのでしょうか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】リモートLinuxマシンでC++をコンパイルする - "clock skew detected "の警告が表示される
-
[解決済み】makeでビルドした後の.dファイルとは?
-
[解決済み】gcc: エラー: 認識されないコマンドラインオプション
-
[解決済み】Apacheサーバーがクラッシュし続ける。"caught SIGTERM, shutting down"
-
[解決済み] Ubuntuにchkconfigをインストールするにはどうしたらいいですか?
-
[解決済み] tar: エラーは回復不可能:現在終了中
-
[解決済み] エラー: gdal がインストールされているのに、R 依存パッケージのインストール中に gdal-config が見つからない
-
[解決済み] シェルで 'exec ls' を実行すると何が起こるか、またその理由は?[クローズド]。
-
[解決済み] 次のコマンドの -print0 の意味を教えてください。
-
[解決済み] ls: 読み込みディレクトリ .: 入出力エラー [閉じた].